Model

Contents

Model#

class liesel.model.model.Model(nodes_and_vars, grow=True, copy=False, to_float32=True)[source]#

Bases: object

A model with a static graph.

Tip

If you have an existing model and want to make changes to it, you can use the Model.pop_nodes_and_vars() method to release the nodes and variables of the model. You can then make changes to them, for example i.e. changing the distribution of a variable or the inputs of a calculation. Afterwards, you initialize a new model with your changed variables. If you simply want to change the value of a variable, it is not necessary to call pop_nodes_and_vars(), you can simply override the Var.value attribute. Remeber to call Model.update() afterwards.

Parameters:
  • nodes_and_vars (Iterable[Node | Var]) – The nodes and variables to include in the model.

  • grow (bool) – Whether a GraphBuilder should be used to grow the model (finding the recursive inputs of the nodes and variables), and to add the model nodes. (default: True)

  • copy (bool) – Whether the nodes and variables should be copied upon initialization. (default: False)

  • to_float32 (bool) – Whether to convert the dtype of the values of the added nodes from float64 to float32. Only takes effect if grow=True. (default: True)

See also

Var.new_obs

Initializes a strong variable that holds observed data.

Var.new_param

Initializes a strong variable that acts as a model parameter.

Var.new_calc

Initializes a weak variable that is a function of other variables.

Var.new_value

Initializes a strong variable without a distribution.

GraphBuilder

A graph builder, which can be used to set up and manipulate a model if you need more control.

Examples

Here, we set up a basic model based on three variables:

>>> a = lsl.Var.new_value(1.0, name="a")
>>> b = lsl.Var.new_value(2.0, name="b")
>>> c = lsl.Var.new_calc(lambda x, y: x + y, a, b, name="c")

We now build a model:

>>> model = lsl.Model([c])
>>> model
Model(9 nodes, 3 vars)

Methods

copy_nodes_and_vars()

Returns an unfrozen deep copy of the model nodes and variables.

groups()

Collects the groups from all nodes and variables.

pop_nodes_and_vars()

Pops the nodes and variables out of this model.

set_seed(seed)

Splits and sets the seed / PRNG key.

simulate(seed[, skip])

Updates the model state simulating from the probability distributions in the model using a provided random seed, optionally skipping specified nodes.

update(*names)

Updates the target nodes and their recursive inputs if they are outdated.

Attributes

auto_update

Whether to update the model automatically if the value of a node is modified.

log_lik

The log-likelihood of the model.

log_prior

The log-prior of the model.

log_prob

The (unnormalized) log-probability / log-posterior of the model.

node_graph

The directed graph of the model nodes.

nodes

A mapping of the model nodes with their names as keys.

state

The state of the model as a dict of node names and states.

var_graph

The directed graph of the model variables.

vars

A mapping of the model variables with their names as keys.