Source code for idmtools_calibra.utilities.parameter_set

from copy import deepcopy
import numpy as np


[docs]class NaNDetectedError(ValueError): pass
[docs]class ParameterSet: def __init__(self, param_dict, iteration_number=None, run_number=None, sim_id=None, likelihood=None, sublikelihoods=None): self.param_dict = param_dict self.iteration_number = iteration_number self.run_number = run_number self.sim_id = sim_id self.likelihood = likelihood self.likelihood_exponentiated = np.exp(likelihood) self.parameterization_id = None # set this to something else if you want to track sets of ParameterSets if sublikelihoods is None: self.sublikelihoods = {} else: self.sublikelihoods = {'likelihood_' + sl_name: value for sl_name, value in sublikelihoods.items()} # components of the total likelihood
[docs] def to_dict(self): return_dict = deepcopy(self.param_dict) return_dict['iteration_number'] = self.iteration_number return_dict['run_number'] = self.run_number return_dict['sim_id'] = self.sim_id return_dict['likelihood'] = self.likelihood return_dict.update(self.sublikelihoods) if self.parameterization_id is not None: return_dict['parameterization_id'] = self.parameterization_id return return_dict
@staticmethod def _get_items(items_to_get, source_dict): items_dict = {} for item in items_to_get: value = source_dict.pop(item) if not isinstance(value, str) and np.isnan(value): value = None items_dict[item] = value return items_dict
[docs] @classmethod def from_dict(cls, source_dict): # first verify that no values in the source dict are nan, (e.g. read in from blank row of a csv file) if np.nan in source_dict.values(): raise NaNDetectedError('At least one nan found in parameter set dict.') items_to_get = ['iteration_number', 'run_number', 'sim_id', 'likelihood', 'parameterization_id'] items_dict = cls._get_items(items_to_get, source_dict) items_to_get = [k for k in source_dict.keys() if k.startswith('likelihood_')] sublikelihoods_dict = cls._get_items(items_to_get, source_dict) parameterization_id = items_dict.pop('parameterization_id') param_dict = deepcopy(source_dict) ps = cls(param_dict=param_dict, sublikelihoods=sublikelihoods_dict, **items_dict) ps.parameterization_id = parameterization_id return ps