adiabatic_scan

experimental.network_dynamics.analysis.adiabatic_scan

Adiabatic parameter scan: a network bifurcation diagram.

Slowly ramp one parameter from low to high (and optionally back down to catch hysteresis), carrying the settled state forward between steps, and record summary statistics of an observed network signal at each value. This traces a bifurcation-diagram-like picture of how the network’s activity changes with the swept parameter.

The swept parameter is addressed with a lens accessor applied through eqx.tree_at (e.g. lambda c: c.coupling.instant.G), so any nested config field can be scanned without the function knowing its name.

Classes

Name Description
AdiabaticScanResult Result of an :func:adiabatic_scan.

AdiabaticScanResult

experimental.network_dynamics.analysis.adiabatic_scan.AdiabaticScanResult(
    p,
    n_up,
    stats,
)

Result of an :func:adiabatic_scan.

Attributes

Name Type Description
p jax.Array The swept parameter values, in scan order. Length 2*n when bothways (up then down), else n.
n_up int Number of values in the ascending branch. p[:n_up] is the up-branch and p[n_up:] the down-branch.
stats Bunch of str -> jax.Array One array per recorded statistic, stacked along the scan axis and reachable by attribute (stats.mean) or key (stats["mean"]). Shape is [len(p)] for scalar reducers and [len(p), ...] for vector-valued reducers (e.g. [len(p), n_nodes] for a per-node statistic).

Functions

Name Description
adiabatic_scan Ramp one parameter and record network statistics (bifurcation diagram).

adiabatic_scan

experimental.network_dynamics.analysis.adiabatic_scan.adiabatic_scan(
    network,
    solver=None,
    *,
    accessor,
    low,
    high,
    n,
    t=2000.0,
    skip=1000.0,
    dt=1.0,
    t0=0.0,
    bothways=True,
    observe=None,
    statistics=None,
)

Ramp one parameter and record network statistics (bifurcation diagram).

Parameters

Name Type Description Default
network Network required
solver solver instance, optional (default: Heun()) None
accessor callable Lens onto the swept leaf, used as eqx.tree_at(accessor, config, value). Example: lambda c: c.coupling.instant.G. required
low float Bounds of the swept parameter. required
high float Bounds of the swept parameter. required
n int Number of values per branch. required
t float Simulation duration per step in ms. 2000.0
skip float Transient duration in ms discarded before computing statistics. 1000.0
dt float Integration timestep in ms. 1.0
t0 float Simulation start time. 0.0
bothways bool If True, scan up then back down to expose hysteresis. True
observe callable result -> [n_time, n_nodes] signal to summarise. Defaults to the first variable across all nodes. None
statistics dict of str -> callable Maps a name to a reducer [n_time, n_nodes] -> scalar or array. Vector-valued reducers (e.g. a per-node [n_nodes] statistic) are supported as long as the output shape is the same at every scan point. Defaults to mean/min/max of the per-node temporal mean across the network. None

Returns

Name Type Description
AdiabaticScanResult

Notes

The settled state is carried forward between steps (the slow, adiabatic ramp). For networks with delayed coupling the delay history buffer is not carried, so this is only exact for instantaneous (non-delayed) coupling.