Source code for means.simulation.descriptors

"""
Simulation Descriptors
----

Descriptors that are local to the simulation package
"""

from means.core import Descriptor


[docs]class SensitivityTerm(Descriptor): r""" A :class:`~means.approximation.ode_problem.Descriptor` term that describes a particular object represents the sensitivity of some ODE term with respect to some parameter. In other words, sensitivity term describes :math:`s_{ij}(t) = \frac{\partial y_i(t)}{\partial p_j}` where :math:`y_i` is the ODE term described above and :math:`p_j` is the parameter. This class is used to describe sensitivity trajectories returned by :class:`means.simulation.simulate.Simulation` """ _ode_term = None _parameter = None yaml_tag = '!sensitivity-term' def __init__(self, ode_term, parameter): """ :param ode_term: the ode term whose sensitivity is being computed :type ode_term: :class:`~means.approximation.ode_problem.ODETermBase` :param parameter: parameter w.r.t. which the sensitivity is computed :type parameter: :class:`sympy.Symbol` """ self._ode_term = ode_term self._parameter = parameter @property def ode_term(self): return self._ode_term @property def parameter(self): return self._parameter def __repr__(self): return '<Sensitivity of {0!r} w.r.t. {1!r}>'.format(self.ode_term, self.parameter)
[docs] def mathtext(self): # Double {{ and }} in multiple places as to escape the curly braces in \frac{} from .format return r'$\frac{{\partial {0}}}{{\partial {1}}}$'.format(self.ode_term.symbol, self.parameter)
def __eq__(self, other): if not isinstance(other, self.__class__): return False return self.ode_term == other.ode_term and self.parameter == other.parameter @classmethod
[docs] def to_yaml(cls, dumper, data): mapping = [('ode_term', data.ode_term), ('parameter', data.parameter)] return dumper.represent_mapping(cls.yaml_tag, mapping)
[docs]class PerturbedTerm(Descriptor): r""" A :class:`~means.approximation.ode_problem.Descriptor` term that describes a particular object represents the sensitivity of some ODE term with respect to some parameter. In other words, sensitivity term describes :math:`s_{ij}(t) = \frac{\partial y_i(t)}{\partial p_j}` where :math:`y_i` is the ODE term described above and :math:`p_j` is the parameter. This class is used to describe sensitivity trajectories returned by :class:`means.simulation.simulate.Simulation` """ _ode_term = None _parameter = None _delta = None def __init__(self, ode_term, parameter, delta=0.01): """ :param ode_term: the ode term whose sensitivity is being computed :type ode_term: :class:`~means.approximation.ode_problem.ODETermBase` :param parameter: parameter w.r.t. which the sensitivity is computed :type parameter: :class:`sympy.Symbol` """ self._ode_term = ode_term self._parameter = parameter self._delta = delta @property def ode_term(self): return self._ode_term @property def parameter(self): return self._parameter @property def delta(self): return self._delta def __repr__(self): return '<Perturbed {0!r} when {1!r} is perturbed by {2!r}>'.format(self.ode_term, self.parameter, self.delta) def __mathtext__(self): # Double {{ and }} in multiple places as to escape the curly braces in \frac{} from .format return r'${0}$ when ${1}={1}+{2}$'.format(self.ode_term.symbol, self.parameter, self.delta)