cottax.ode.consumers.architectures module

Registers how an architecture places an ODE (ModelReading), with why one is no implicit model.

class OdeModel[source]

Bases: ModelReading

Implicit model is here the entire function body: a cut in it does not work. In algebraic systems a cut is always the same (since hat(y) = y algebraically), but in rate-based systems where the body is integrated, that is not the same (hat(y) might change during the integration).

not_implicit(graph, problem)[source]

Why the problem bound at problem is no implicit model in its language; nothing if it is.

body(graph, problem)[source]

The function nodes that are its own, in binding order: what an architecture boxes with it, and never cuts inside.

combines_as(condition)[source]

The kind whose + folds it (Combine’s kind), or None: it is folded into nothing.

class RateUnwritten(problem: str, rates: tuple)[source]

Bases: Violation

problem: str
rates: tuple
template: AbstractClassVar[str] = '{problem} is not an implicit model: no function node writes {rates!r} -- a rate is what its body computes from the states'

e.g. ‘output {place!r} is owned by both {other!r} and {node!r}’

Type:

Wording