Source code for pydsol.core.model

from abc import abstractmethod
from typing import Dict

from pydsol.core.interfaces import SimulatorInterface, ModelInterface, \
    StatisticsInterface
from pydsol.core.parameters import InputParameterMap, InputParameter
from pydsol.core.utils import DSOLError, get_module_logger

__all__ = [
    "DSOLModel",
    ]

logger = get_module_logger('model')


[docs]class DSOLModel(ModelInterface): def __init__(self, simulator: SimulatorInterface, **kwargs): # TODO: streams if not isinstance(simulator, SimulatorInterface): raise DSOLError(f"simulator {simulator} not valid") self._simulator = simulator self._input_parameters = InputParameterMap("root", "parameters", 1) self._output_statistics: Dict[str, StatisticsInterface] = {}
[docs] @abstractmethod def construct_model(self): """code to construct the model for each replication"""
@property def simulator(self): """return the simulator for this model""" return self._simulator @property def input_parameters(self): """return the input parameter map.""" return self._input_parameters @input_parameters.setter def input_parameters(self, input_parameters: InputParameterMap): """set a new input parameter map.""" if not isinstance(input_parameters, InputParameterMap): raise TypeError(f"input_parameters {input_parameters}" + \ "not an InputparameterMap") self._input_parameters = input_parameters
[docs] def add_parameter(self, input_parameter: InputParameter): """add an input parameter to the input parameter map.""" self._input_parameters.add(input_parameter)
[docs] def set_parameter(self, key: str, value: object): """set the parameter value of an input parameter.""" self._input_parameters.get(key).value = value
[docs] def get_parameter(self, key: str) -> object: """return the value of an input parameter.""" return self._input_parameters.get(key).value
[docs] def output_statistics(self) -> Dict[str, StatisticsInterface]: """return the output statistics map.""" return self._output_statistics
[docs] def add_output_statistic(self, key: str, statistic: StatisticsInterface): """add an output statistic to the output statistics map.""" if key in self._output_statistics: raise DSOLError(f"output statistic key {key} already registered") if not isinstance(statistic, StatisticsInterface): raise TypeError(f"output statistic {statistic}" + \ "not an output statistic type") self._output_statistics[key] = statistic
[docs] def get_output_statistic(self, key: str) -> StatisticsInterface: """retrieve an output statistic from the output statistics map.""" return self._output_statistics[key]