easyvvuq.utils.db_benchmark

 1import easyvvuq as uq
 2import chaospy as cp
 3import numpy as np
 4import json
 5from timeit import Timer
 6
 7
 8def benchmark(nsamples):
 9    params = {
10        "S0": {"type": "float", "default": 997},
11        "I0": {"type": "float", "default": 3},
12        "beta": {"type": "float", "default": 0.2},
13        "gamma": {"type": "float", "default": 0.04, "min": 0.0, "max": 1.0},
14        "iterations": {"type": "integer", "default": 100},
15        "outfile": {"type": "string", "default": "output.csv"}
16    }
17    encoder = uq.encoders.GenericEncoder(
18        template_fname='tutorials/sir.template',
19        delimiter='$',
20        target_filename='input.json')
21    decoder = uq.decoders.SimpleCSV(target_filename='output.csv', output_columns=['I'])
22    actions = uq.actions.local_execute(encoder, 'sir input.json', decoder)
23    campaign = uq.Campaign(name='sir_benchmark', params=params, actions=actions)
24    vary = {
25        "beta": cp.Uniform(0.15, 0.25),
26        "gamma": cp.Normal(0.04, 0.001),
27    }
28    campaign.set_sampler(uq.sampling.RandomSampler(vary=vary))
29    benchmark_results = {}
30    t = Timer('campaign.draw_samples(nsamples)', globals=locals())
31    benchmark_results['draw_samples'] = t.timeit(1)
32
33    def fake_results():
34        counter = 1
35        while True:
36            yield ('Run_{}'.format(counter), {'values': list(np.random.random(size=100))})
37            counter += 1
38    fakes = fake_results()
39    results_ = []
40    for _ in range(nsamples):
41        results_.append(next(fakes))
42    t = Timer(
43        'campaign.campaign_db.store_results(campaign._active_app_name, results_)',
44        globals=locals())
45    benchmark_results['store_results'] = t.timeit(1)
46    t = Timer('campaign.get_collation_result()', globals=locals())
47    benchmark_results['get_collation_result'] = t.timeit(1)
48    return benchmark_results
49
50
51if __name__ == '__main__':
52    nsamples = [1000, 10000, 100000, 1000000]
53    results = {}
54    for nsamples_ in nsamples:
55        results[nsamples_] = benchmark(nsamples_)
56    print(json.dumps(results))
def benchmark(nsamples):
 9def benchmark(nsamples):
10    params = {
11        "S0": {"type": "float", "default": 997},
12        "I0": {"type": "float", "default": 3},
13        "beta": {"type": "float", "default": 0.2},
14        "gamma": {"type": "float", "default": 0.04, "min": 0.0, "max": 1.0},
15        "iterations": {"type": "integer", "default": 100},
16        "outfile": {"type": "string", "default": "output.csv"}
17    }
18    encoder = uq.encoders.GenericEncoder(
19        template_fname='tutorials/sir.template',
20        delimiter='$',
21        target_filename='input.json')
22    decoder = uq.decoders.SimpleCSV(target_filename='output.csv', output_columns=['I'])
23    actions = uq.actions.local_execute(encoder, 'sir input.json', decoder)
24    campaign = uq.Campaign(name='sir_benchmark', params=params, actions=actions)
25    vary = {
26        "beta": cp.Uniform(0.15, 0.25),
27        "gamma": cp.Normal(0.04, 0.001),
28    }
29    campaign.set_sampler(uq.sampling.RandomSampler(vary=vary))
30    benchmark_results = {}
31    t = Timer('campaign.draw_samples(nsamples)', globals=locals())
32    benchmark_results['draw_samples'] = t.timeit(1)
33
34    def fake_results():
35        counter = 1
36        while True:
37            yield ('Run_{}'.format(counter), {'values': list(np.random.random(size=100))})
38            counter += 1
39    fakes = fake_results()
40    results_ = []
41    for _ in range(nsamples):
42        results_.append(next(fakes))
43    t = Timer(
44        'campaign.campaign_db.store_results(campaign._active_app_name, results_)',
45        globals=locals())
46    benchmark_results['store_results'] = t.timeit(1)
47    t = Timer('campaign.get_collation_result()', globals=locals())
48    benchmark_results['get_collation_result'] = t.timeit(1)
49    return benchmark_results