Source code for easyvvuq.utils.db_benchmark

import easyvvuq as uq
import chaospy as cp
import numpy as np
import json
from timeit import Timer


[docs]def benchmark(nsamples): params = { "S0": {"type": "float", "default": 997}, "I0": {"type": "float", "default": 3}, "beta": {"type": "float", "default": 0.2}, "gamma": {"type": "float", "default": 0.04, "min": 0.0, "max": 1.0}, "iterations": {"type": "integer", "default": 100}, "outfile": {"type": "string", "default": "output.csv"} } encoder = uq.encoders.GenericEncoder( template_fname='tutorials/sir.template', delimiter='$', target_filename='input.json') decoder = uq.decoders.SimpleCSV(target_filename='output.csv', output_columns=['I']) actions = uq.actions.local_execute(encoder, 'sir input.json', decoder) campaign = uq.Campaign(name='sir_benchmark', params=params, actions=actions) vary = { "beta": cp.Uniform(0.15, 0.25), "gamma": cp.Normal(0.04, 0.001), } campaign.set_sampler(uq.sampling.RandomSampler(vary=vary)) benchmark_results = {} t = Timer('campaign.draw_samples(nsamples)', globals=locals()) benchmark_results['draw_samples'] = t.timeit(1) def fake_results(): counter = 1 while True: yield ('Run_{}'.format(counter), {'values': list(np.random.random(size=100))}) counter += 1 fakes = fake_results() results_ = [] for _ in range(nsamples): results_.append(next(fakes)) t = Timer( 'campaign.campaign_db.store_results(campaign._active_app_name, results_)', globals=locals()) benchmark_results['store_results'] = t.timeit(1) t = Timer('campaign.get_collation_result()', globals=locals()) benchmark_results['get_collation_result'] = t.timeit(1) return benchmark_results
if __name__ == '__main__': nsamples = [1000, 10000, 100000, 1000000] results = {} for nsamples_ in nsamples: results[nsamples_] = benchmark(nsamples_) print(json.dumps(results))