reno.components.Function#

class reno.components.Function(f, *args, inject_mathlib=True, pt_mathlib=None, np_mathlib=None, **kwargs)#

Bases: Reference

Represents a call to a python function _outside_ of a model/system of equations.

This is to allow for computations that might be a little complex, too fancy, or too annoying to specify entirely within the EquationPart system. By wrapping the call with this class, we defer actual computation/computation of input parameters until eval time, it’s a thunk!

Note

Any passed arguments that _are_ equations will be evaluated and passed in to the actual function call when .eval() is run. In a simulation run with stocks/flows etc., these arguments are likely to resolve to numpy arrays, which is the vector of all samples for that argument at the current eval’ed timestep. (So the function should expect to do vector operations, numpy will probably automagically handle this.)

NOTE: theoretically works in pymc conversion (as long as mathlib is used) but relatively untested as of writing.

NOTE: pt_str isn’t implemented in this class due to difficulty in referring to an unknown external function via a string.

Methods

__init__(f, *args[, inject_mathlib, ...])

Create a function thunk node for an equation tree.

astype(dtype)

Returns a symbolic operation to convert the output of this equation to the specified type.

clip(min, max)

Returns a symbolic operation for enforcing the output is between the passed min and max.

equal(obj)

Returns a symbolic operation for checking equality with passed object.

eval([t, save, force])

Eval any function arguments as needed, and then call the function itself.

find_parts_of_type(search_type[, ...])

Recursively search for all EquationParts in the tree of the specified type.

get_shape()

Get the size of the additional "data" dimension.

get_type()

Get the type of the target output of this equation expression.

is_static()

Convenience shortcut for reno.utils.is_static() - True if this equation doesn't rely on any dynamic values (thus constant), False if it does.

latex(**kwargs)

Get a latex-suitable string representation of the function.

mean([axis])

Returns a symbolic operation to find the series-wise mean of the array.

not_equal(obj)

Returns a symbolic operation for checking inequality with passed object.

pt(**refs)

Get a pytensor graph representing this piece of an equation.

pt_str(**refs)

Construct a string containing relevant pytensor code for this piece of the equation.

seek_refs([include_ref_types])

Recursively find a list of all References immediately underneath this part.

series_max()

Returns a symbolic operation to find the series-wise maximum of the array.

series_min()

Returns a symbolic operation to find the series-wise minimum of the array.

sum([axis])

Returns a symbolic operation to find the series-wise sum of the array.

Attributes

dtype

The type of each underlying value.

shape

The size of the data dimension, 1 by default.

timeseries

Returns symbolic operation for getting a timeseries view of the data.

label

Label is what's used in any visual representation (e.g. allows spaces where name does not.).

doc

A docstring to explain/describe the reference.

Parameters:
  • f (Callable)

  • args (list)

  • inject_mathlib (bool)

  • pt_mathlib (ModuleType)

  • np_mathlib (ModuleType)

  • kwargs (dict)

__annotations__ = {}#
__module__ = 'reno.components'#
__repr__()#

Return repr(self).

Return type:

str

eval(t=0, save=False, force=False, **kwargs)#

Eval any function arguments as needed, and then call the function itself.

Parameters:
  • t (int) – Timestep along simulation at which to evaluate.

  • save (bool) – Ignored in this subclass, but passed along in sub- .eval() calls.

  • force (bool) – Whether to ignore a previously cached value and compute regardless.

  • kwargs (dict) – Any additional arguments to pass through evaluation tree.

Return type:

int | float | ndarray

latex(**kwargs)#

Get a latex-suitable string representation of the function.

Uses texttt to make it look like code and distinguishable from flows/vars/stocks/etc.

Parameters:

kwargs (dict)

Return type:

str

pt(**refs)#

Get a pytensor graph representing this piece of an equation.

Parameters:

refs (dict[str, TensorVariable])

Return type:

TensorVariable