atomica.model.Parameter¶
- class atomica.model.Parameter(pop, name)[source]¶
Bases:
Variable
Integration object to represent Parameters
A parameter is a Variable that can have a value computed via an fcn_str and a list of dependent Variables. This is a Parameter in the cascade.xlsx sense - there is one Parameter object for every item in the Parameters sheet. A parameter that maps to multiple transitions (e.g.
doth_rate
) will have one parameter and multiple Link instances that depend on the same Parameter instance- Parameters:
pop – A
Population
instance corresponding to the population that will contain this parametername – The code name for this parameter
Attributes
Variable code name
Can be a two element vector [min,max]
If not None, stores list of population aggregation information (special function, which weighting comp/charac and which interaction term to use)
This should be set to the product of the population-specific
y_factor
and themeta_y_factor
from the ParameterSetReferences to links that derive from this parameter
String representation of parameter function
Dict of dependencies containing lists of integration objects
If True, the parameter function will be treated as a derivative and the value added on to the end
Can optionally be set to a (start,stop) tuple of times.
For transition parameters, the
vals
stored by the parameter is effectively a rate.Unique identifier for the integration object
The units for the quantity, used for plotting and for validation.
Reference back to the Population containing this object
Methods
Constrain the parameter value to allowed range
Produce a time series plot
Preallocate data storage
relink
Mark this parameter as needing evaluation for integration
Add a function to this parameter
source_popsize
unlink
Update the value of this Parameter
- constrain(ti=None)[source]¶
Constrain the parameter value to allowed range
If
Parameter.limits
is not None, then the parameter values at the specified time will be clipped to the limits. If no time index is provided, clipping will be performed on all values in a vectorized operation. Vector clipping is used for data parameters that are not evaluated during integration, while index-specific clipping is used for dependencies that are calculated during integration.- Parameters:
ti – An integer index, or None (to operate on all time points)
- Return type:
- deps¶
Dict of dependencies containing lists of integration objects
- derivative¶
If True, the parameter function will be treated as a derivative and the value added on to the end
- fcn_str¶
String representation of parameter function
- id¶
Unique identifier for the integration object
- limits¶
Can be a two element vector [min,max]
- links¶
References to links that derive from this parameter
- property name: str¶
Variable code name
This is implemented as a property method because the
id
of theVariable
is a tuple containing the population name and the variable code name, so this property method returns just the variable code name portion. That way, storage does not need to be duplicated.- Returns:
A code name
- plot()¶
Produce a time series plot
This is a quick function to make a basic line plot of this
Variable
. Mainly intended for debugging. Production-ready plots should be generated using the plotting library functions instead- Return type:
- pop¶
Reference back to the Population containing this object
- pop_aggregation¶
If not None, stores list of population aggregation information (special function, which weighting comp/charac and which interaction term to use)
- preallocate(tvec, dt)¶
Preallocate data storage
This method gets called just before integration, once the final sizes of the arrays are known. Performance is improved by preallocating the arrays. The
tvec
attribute is assigned as-is, so it is typically a reference to the array stored in the parentModel
object. Thus, there is no duplication of storage there, andVariable.tvec
is mainly for convenience when interpolating or plotting.This method may be overloaded in derived classes to preallocate other variables specific to those classes.
- scale_factor¶
This should be set to the product of the population-specific
y_factor
and themeta_y_factor
from the ParameterSet
- set_dynamic(progset=None)[source]¶
Mark this parameter as needing evaluation for integration
If a parameter has a function and set_dynamic() has been called, that means the result of the function is required to drive a transition in the model. In this context, ‘dynamic’ means that the parameter depends on values that are only known during integration (i.e. compartment sizes). It could also depend on compartment sizes indirectly, if it depends on characteristics, or if it depends on parameters that depend on compartments or characteristics. If none of these are true, then the parameter function can be evaluated before integration starts, taking advantage of vector operations.
If a parameter is overwritten by a program in this simulation, then its value may change during integration, and we again need to make this parameter dynamic. Note that this doesn’t apply to the parameter being overwritten - if it gets overwritten, that has no bearing on when its function gets evaluated. But if a parameter depends on a value that has changed, then the function must be re-evaluated. Technically this only needs to be done after the time index where programs turn on, but it’s simpler just to mark it as dynamic for the entire simulation, the gains aren’t large enough to justify the extra complexity otherwise.
- Parameters:
progset – A
ProgramSet
instance (the one contained in the Model containing this Parameter)- Return type:
- set_fcn(fcn_str)[source]¶
Add a function to this parameter
This method adds a function to the parameter. The following steps are carried out
The function is parsed and stored in the
._fcn
attribute (until the Parameter is pickled)The dependencies are extracted, and are stored as references to the actual integration objects to increase performance during integration
If this is a transition parameter, then dependencies will have their dynamic flag updated
- Parameters:
framework – A py:class:ProjectFramework instance, used to identify and retrieve interaction terms
fcn_str – The string containing the function to add
- Return type:
- skip_function¶
Can optionally be set to a (start,stop) tuple of times. Between these times, the parameter will not be updated so the parset value will be left unchanged
- timescale¶
For transition parameters, the
vals
stored by the parameter is effectively a rate. Thetimescale
attribute informs the time period corresponding to the units in which the rate has been provided. If the units arenumber
orprobability
then thetimescale
corresponds to the denominator of the units e.g. probability/day (withtimescale=1/365
). If the units areduration
then the timescale stores the units in which the duration has been specified e.g.duration=1
withtimescale=1/52
is the same asduration=7
withtimescale=1/365
The effective duration used in the simulation isduration*timescale
with units of years (so it will behave correctly if one wanted to use 1/365.25 instead of 1/365)
- units¶
The units for the quantity, used for plotting and for validation. Note that the default
'unknown'
units are distinct to dimensionless units, which have value''
- update(ti=None)[source]¶
Update the value of this Parameter
If the parameter contains a function, this entails evaluating the function. Typically this is done at a single time point during integration, or over all time points for precomputing and postcomputing
- Parameters:
ti – An
int
, or a numpy array with index values. IfNone
, all time values will be used- Return type: