Source code for smif.parameters

"""
"""
from collections import UserDict
from logging import getLogger


[docs]class ParameterList(UserDict): def __init__(self, **kwargs): super().__init__(**kwargs) self.logger = getLogger(__name__)
[docs] def as_dict(self): config = [] for param in self.data.values(): config.append({'name': param['name'], 'description': param['description'], 'default_value': param['default_value'], 'absolute_range': param['absolute_range'], 'suggested_range': param['suggested_range']}) return list(self.data.values())
@property def parameters(self): return self.data @property def defaults(self): return {name: param['default_value'] for name, param in self.data.items()}
[docs] def add_parameters_from_list(self, config_list): for parameter in config_list: name = parameter['name'] self.data[name] = parameter
[docs] def add_parameter(self, name, description, absolute_range, suggested_range, default_value, units, parent): """Add a parameter to the parameter list Arguments --------- name : str description : str absolute_range : tuple suggested_range : tuple default_value : float units : str parent : `smif.model.Model` """ if name in self.data: raise ValueError("Parameter already defined") self.data[name] = {'name': name, 'description': description, 'absolute_range': absolute_range, 'suggested_range': suggested_range, 'default_value': default_value, 'units': units, 'parent': parent} msg = "Added parameter '%s' to '%s'" self.logger.debug(msg, name, parent.name)
@property def names(self): """Returns the names of all the contained parameters """ return list(self.data.keys()) def __getitem__(self, key): return self.parameters[key]