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.