circuit op• Data kinds: conn_graph × matrix → matrix
• Call: import fullseye as fs; fs.ledger.graph_conductance_states(W: 'Any', drive: 'Any', dt_s: 'float' = 0.001, tau_s: 'float' = 0.02, e_rest: 'float' = 0.0, e_exc: 'float' = 1.0, e_inh: 'float' = -1.0, release: 'str' = 'relu', v_half: 'float' = 0.5, slope: 'float' = 4.0, gain: 'float' = 1.0, v0: 'Any' = None) -> 'np.ndarray' (to call the implementation directly, import conngraph; conngraph.graph_conductance_states(W: 'Any', drive: 'Any', dt_s: 'float' = 0.001, tau_s: 'float' = 0.02, e_rest: 'float' = 0.0, e_exc: 'float' = 1.0, e_inh: 'float' = -1.0, release: 'str' = 'relu', v_half: 'float' = 0.5, slope: 'float' = 4.0, gain: 'float' = 1.0, v0: 'Any' = None) -> 'np.ndarray'; from the registry, opsconngraph.get("graph_conductance_states"))
Time series of membrane potentials (T, n) obtained by running the wiring W directly as a circuit (matrix, no learning).
What looked like "multiplication" as a nonlinearity in the fly optic lobe turned out to be a dendritic conductance ratio (Groschner et al. 2022: at steady state Vm = Σgᵢ Eᵢ / Σgᵢ). An equation of the same form is also the standard form of whole-brain models that fix the connectome as wiring (Lappalainen et al. 2024:
τᵢ V̇ᵢ = −Vᵢ + Σ sᵢⱼ + V_rest). This op runs its dynamic version with only 1 conn_graph and 1 external input:
τ dVᵢ/dt = −(Vᵢ − e_rest) + g⁺ᵢ (e_exc − Vᵢ) + g⁻ᵢ (e_inh − Vᵢ)
g⁺ is the positive weights of W, and g⁻ the absolute value of the negative weights, each weighted by the presynaptic release f(V) and summed (the sign of drive is added in the same direction). The weights are used as given -- no learning and no fitting whatsoever. The time constant shrinks with input (effective τ = τ/(1+g⁺+g⁻)), so this is exactly liquid time-constant dynamics, but the parameters are only the wiring and constants; not 1 number is determined by gradients.
W: (n, n) weighted adjacency matrix (W[pre, post], positive = excitatory, negative = inhibitory).
drive: (T, n) external input. Positive enters as a conductance pulling the node towards e_exc, negative towards e_inh
(not a current -- with a current the boundedness below would break).
dt_s / tau_s: step and membrane time constant [s]. e_rest / e_exc / e_inh: resting potential and the 2 reversal potentials.
release: presynaptic release f(V). "relu" is gain·max(V, 0), "sigmoid" is
gain/(1+exp(−slope(V−v_half))). Both are non-negative, so no negative conductance
(which does not exist physically) is created -- that is the premise of the boundedness below.
v_half / slope: half-value point and slope of the sigmoid. gain: release gain (non-negative).
v0: initial state (n,). Default is e_rest for all nodes.
Each stage advances with the exact solution for frozen conductances (V ← V∞ + (V − V∞)e^{−dt·g_tot/τ}), so it does not diverge even with a coarse step.
What can be checked against closed-form expressions:
• Boundedness: as long as release is non-negative, V∞ is a convex combination of the 3 reversal potentials, so it lies within [min(e_rest, e_exc, e_inh), max(...)]. Each stage only pulls V exponentially towards that V∞, so starting inside the box it always stays inside the box, and starting outside it never moves further out but heads towards the box. That it does not diverge for any wiring and any input is guaranteed by the structure (the default of v0 is e_rest = inside the box).
• Decay: with no input and no coupling, exactly V(t) = e_rest + (V₀ − e_rest)e^{−t/τ}.
• Steady state: a constant input d > 0 into 1 node gives V∞ = (e_rest + d·e_exc)/(1 + d), and the effective time constant towards it is exactly τ/(1 + d) (the number behind "input shrinks the time constant").
ValueError: non-square / non-finite W, drive that is not (T, n), non-positive dt_s / tau_s, negative gain, unknown release, v0 of mismatched length.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_fly_optomotor_steering — py -3.11 examples/poc_fly_optomotor_steering.py
matrix as input)reservoir_states · reservoir_encode · ridge_readout · ridge_predict · graph_activation_latency · graph_activity_spread · points_activity_video · graph_layer_propagate
circuit)—
*Provenance: conngraph.py — CONNGRAPH operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.