solve

experimental.network_dynamics.solve

Solving system for network architecture.

This module provides the prepare-solve pattern for Network with multi-coupling support. The prepare() function sets up the integration with all coupling state management, and returns a pure function for execution.

Functions

Name Description
prepare Prepare a bare dynamics model for simulation using Diffrax.
solve Main entry point for simulation.

prepare

experimental.network_dynamics.solve.prepare(
    dynamics,
    solver,
    t0=0.0,
    t1=1.0,
    dt=0.1,
    n_nodes=1,
    noise=None,
    externals=None,
)

Prepare a bare dynamics model for simulation using Diffrax.

Lightweight alternative to the Network-based prepare() for uncoupled simulations with adaptive time stepping. Coupling inputs are set to zero.

Parameters

Name Type Description Default
dynamics AbstractDynamics Dynamics model instance (e.g. JansenRit, ReducedWongWang) required
solver DiffraxSolver Diffrax integration method (Tsit5, Dopri5, etc.) required
t0 float Start time, by default 0.0 0.0
t1 float End time, by default 1.0 1.0
dt float Initial step size (dt0) for adaptive controller, by default 0.1 0.1
n_nodes int Number of uncoupled nodes, by default 1 1
noise AbstractNoise Noise process (e.g. AdditiveNoise, MultiplicativeNoise) None
externals dict External inputs as {name: AbstractExternalInput} None

Returns

Name Type Description
solve_function Callable Pure JAX function: solve_function(config) -> results
config Bunch Configuration PyTree with dynamics params and initial state

solve

experimental.network_dynamics.solve.solve(
    model,
    solver,
    t0=0.0,
    t1=100.0,
    dt=0.1,
    **kwargs,
)

Main entry point for simulation.

Accepts either a Network or a bare AbstractDynamics instance. Dispatches to the appropriate prepare() overload via plum.

Args: model: Network or AbstractDynamics instance solver: NativeSolver or DiffraxSolver instance t0: Start time t1: End time dt: Time step **kwargs: Additional arguments forwarded to prepare() (e.g. n_nodes for bare dynamics)

Returns: Simulation results wrapped in result object

Examples: >>> # With Network >>> result = solve(network, Euler(), t0=0, t1=10, dt=0.01)

>>> # With bare dynamics (single node)
>>> result = solve(JansenRit(), Heun(), t0=0, t1=1.0, dt=0.001)

>>> # With bare dynamics (multi-node uncoupled)
>>> result = solve(JansenRit(), Heun(), t0=0, t1=1.0, dt=0.001, n_nodes=3)