atomica.model.Variable

class atomica.model.Variable(pop, id)[source]

Bases: object

Integration object to manage compartments, characteristics, parameters, and links

This is a lightweight abstract class to store arrays of values at each simulation time step. It includes functionality that is common to all integration objects, and defines the interface to be implemented by derived classes.

param pop

A Population instance. This allows references back to the population containing an object (which facilitates a number of operations such as those that require the population’s size)

param id

ID is a tuple that uniquely identifies the Variable within a model. By convention, this is a population:code_name tuple (but in the case of links, there are additional terms)

Attributes

name

Variable code name

id

Unique identifier for the integration object

units

The units for the quantity, used for plotting and for validation.

pop

Reference back to the Population containing this object

Methods

plot

Produce a time series plot

preallocate

Preallocate data storage

relink

set_dynamic

Make the variable a dependency

unlink

update

Update the value at a given time index

id

Unique identifier for the integration object

property name: str

Variable code name

This is implemented as a property method because the id of the Variable 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.

Return type

str

Returns

A code name

plot()[source]

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

None

pop

Reference back to the Population containing this object

preallocate(tvec, dt)[source]

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 parent Model object. Thus, there is no duplication of storage there, and Variable.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.

Parameters
  • tvec (array) – An array of time values

  • dt (float) – Time step size

Return type

None

set_dynamic(**kwargs)[source]

Make the variable a dependency

For Compartments and Links, this does nothing. For Characteristics and Parameters, it will set the dynamic flag, but in addition, any validation constraints e.g. a Parameter that depends on Links cannot itself be dynamic, will be enforced.

This method generally must be overloaded in derived classes e.g. Parameter.set_dynamic()

Return type

None

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)[source]

Update the value at a given time index

This method performs any required computations to update the value of the variable at a given time index. For example, Parameters may require their update function to be called, while characteristics need their source compartments to be added up.

This method generally must be overloaded in derived classes e.g. Parameter.update()

Parameters

ti (int) – Time index to update

Return type

None