Source code for pythia.parameter

""" PyThia classes containing Parameter information. """
import numpy as np


[docs]class Parameter(object): """ Basic parameter with fixed value. Parameters ---------- name : str Name identifier of the parameter. value : float, optional Parameter value. """ # TODO(Nando): Attributes should not be properties. def __init__(self, name, value=None): """ Initialize parameter object. """ self._name = name assert isinstance(self._name, str) self._val = value self._mode = 'fixed' @property def name(self): """ Parameter name. """ return self._name @property def value(self): """ Parameter value. """ return self._val @value.setter def value(self, value): """ Set parameter value. Parameters ---------- value : float Parameter value. """ self._val = value @property def mode(self): """ Type (mode) of parameter. """ return self._mode def __repr__(self): frmttr = '{:<5} : {}\n' text = '' text += frmttr.format('name', self.name) text += frmttr.format('value', self.value) text += frmttr.format('mode', self.mode) return text[:-1]
[docs]class SteadyParameter(Parameter): """ Subclass of Parameter used for deterministic parameter variations. Parameter representing part of the spatial/physical domain of the problem. Parameters ---------- name : str Parameter name. value : array_like Values the parameter is iterated over. index : int, optional Enumeration index of the parameter. Set automatically if `None`. """ # TODO(Nando): Attributes should not be properties. _index = 0 def __init__(self, name, value, index=None): """ Initialize SteadyParameter object. """ if index is None: self._idx = int(SteadyParameter._index) SteadyParameter._index += 1 else: self._idx = index self._name = name assert isinstance(self._name, str) self._val = value assert hasattr(self._val, '__iter__') self._mode = 'discrete' @property def name(self): """ Parameter name. """ return self._name @property def index(self): """ Index of the parameter. """ return self._idx @property def value(self): """ Parameter value. """ return self._val @value.setter def value(self, value): """ Set parameter value. Parameters ---------- value : array_like Parameter values. """ self._val = value assert hasattr(self._val, '__iter__') def __repr__(self): frmttr = '{:<8} : {}\n' text = '' text += frmttr.format('name', self.name) text += frmttr.format('index', self.index) text += frmttr.format('mode', self.mode) text += frmttr.format('value', self.value) return text[:-1]
[docs]class RandomParameter(Parameter): """ Subclass of Parameter used for stochasic parameters. Parameters ---------- name : str Parameter name. domain : array_like Supported domain of the parameter distribution. distribution : str Distribution identifier of the parameter. value : float or array_like, optional Value (expected) of the parameter. Only used to store information never required for computations. index : int, optional Enumeration index of the parameter. Set automatically if `None`. """ # TODO(Nando): Attributes should not be properties. _index = 0 def __init__(self, name, domain, distribution, value=None, index=None): """ Initialize RandomParameter object. """ if index is None: self._idx = int(RandomParameter._index) RandomParameter._index += 1 else: self._idx = index self._name = name assert isinstance(self._name, str) self._dom = np.array(domain) assert self._dom.shape == (2,) self._dist = distribution assert isinstance(self._dist, str) self._val = value self._mode = 'continuous' self._alpha, self._beta = None, None self._mean, self._var = None, None @property def index(self): """ Index of the parameter. """ return self._idx @property def domain(self): """ Supported domain of the parameter. """ return self._dom @domain.setter def domain(self, domain): """ Set parameter domain. Parameters ---------- domain : array_like Parameter domain (interval). """ self._dom = domain assert self._dom.shape == (2,) @property def distribution(self): """ Distribution identifier of the parameter. """ return self._dist @property def alpha(self): """ Parameter required for Beta or Gamma distribution. """ return self._alpha @alpha.setter def alpha(self, alpha): """ Set parameter (DoF) for Beta or Gamma distribution. Parameters ---------- alpha : float """ self._alpha = float(alpha) assert self._alpha > 0 @property def beta(self): """ Parameter required for Beta distribution. """ return self._beta @beta.setter def beta(self, beta): """ Set parameter (DoF) for Beta distribution. Parameters ---------- beta : float """ self._beta = float(beta) assert self._beta > 0 @property def mean(self): """ Mean of parameter distribution. """ return self._mean @mean.setter def mean(self, mean): """ Set parameter distribution mean for normal distribution. Parameters ---------- mean : float """ self._mean = float(mean) @property def variance(self): """ Variance of parameter distribution. """ return self._var @variance.setter def variance(self, var): """ Set parameter distribution variance for normal distribution. Parameters ---------- var : float """ self._var = float(var) assert var >= 0 def __repr__(self): frmttr = '{:<8} : {}\n' text = '' text += frmttr.format('name', self.name) text += frmttr.format('index', self.index) text += frmttr.format('domain', self.domain) text += frmttr.format('mode', self.mode) text += frmttr.format('dist', self.distribution) if self.alpha is not None: text += frmttr.format('alpha', self.alpha) if self.beta is not None: text += frmttr.format('beta', self.beta) if self.mean is not None: text += frmttr.format('mean', self.mean) if self.variance is not None: text += frmttr.format('variance', self.variance) text += frmttr.format('value', self.value) return text[:-1]
if __name__ == '__main__': pass