Realized EdgeList only — no simulation re-run, no kernel change (Δscience=0). Hover neurons for layer / E/I / phenotype / H / degree / position. Toggle edges by category via checkboxes + legend. Standalone HTML — no server.
N=60 · edges=441 · layers=L1, L2 · cell types=E, PV · phenotype distinct=4 · H ownership=present (mean 1.7)
Left = what was requested in cfg.metadata (connectivity / circuit / compilation). Right = what model.params["edge_list"] materialized — the only place dynamics reads.
| Aspect | Configured spec | Realized EdgeList |
|---|---|---|
| N neurons | — | 60 |
| Edges | 1 | 441 (realized EdgeList) |
| Mean in-degree | — | 7.35 |
| Mean out-degree | — | 7.35 |
| Weight | — (configured within_gain) | mean 0.1291 σ 0 min 0.1291 max 0.1291 |
| Delay | — | all zero (instantaneous) unique steps [0] |
| τ per edge | — | [0.10000000149011612] |
| Categories | — | E→E 441 · E→I 0 · I→E 0 · I→I 0 |
| FF / FB / local | — | FF 441 · FB 0 · local 0 (hierarchy ['A1', 'A2']) |
| Layers → counts | — | {"L1": 30, "L2": 30} |
| Cell-type → counts | — | {"E": 42, "PV": 18} phenotype distinct 4 |
{
"circuit_connections": [
{
"name": "areaconn_0",
"source": {
"area": "A1",
"layer": "L1",
"cell_type": "E"
},
"target": {
"area": "A2",
"layer": "L2",
"cell_type": "E"
},
"probability": 1.0,
"weight": 0.12909944487358055,
"sign": "excitatory",
"mechanism": "monotonic_cable_synapse__dt0.1__0",
"status": "compiled"
}
],
"circuit_mechanisms": [
{
"name": "monotonic_cable_synapse__dt0.1__0",
"kind": "monotonic_cable_synapse",
"params": {
"tau_ms": 0.1
},
"status": "declared_not_compiled"
}
],
"connectivity_mode": "explicit",
"connectivity_compilation": {
"connectivity_mode": "explicit",
"default_edge_count": 0,
"declared_rule_edge_count": 441,
"total_compiled_edge_count": 441
}
}Edge sampling cap for display: 600 per category, 2400 total. Histograms sampled from up to 441 edges with deterministic seed.
FF = cross-area low→high in hierarchy ['A1', 'A2']; FB = high→low. Local = same-area (0 edges) not toggled separately — it is inside the E→E etc. categories. For single-area columns FF/FB are zero by construction.
Rotate/drag to inspect depth (z). Layer colors via legend — click legend entries to isolate a layer. Neuron symbols: E circle, I diamond (same hue per layer). Hover shows H, in/out-degree, phenotype, position.
Mean 0.1291 σ 0 · by category: E→E 0.1291 · E→I — · I→E — · I→I —
All delays zero — instantaneous kernel · unique steps [0]
Mean in 7.35 max 21 · mean out 7.35 max 21
| Phenotype (layer/cell_type) distinct | 4 · {"L1/E": 21, "L1/PV": 9, "L2/E": 21, "L2/PV": 9} |
|---|---|
| Cell-type counts | {"E": 42, "PV": 18} — E/I split: E 42 / I 18 |
| Layer counts | {"L1": 30, "L2": 30} |
| H ownership | {'present': True, 'enabled': True, 'mean': 1.7, 'note': ''} — per-neuron H histogram below |
import jaxfne as jtfne
from jaxfne.vis.column_viewer import render_column_viewer, collect_column_viewer_data
cfg = jtfne.build_laminar_column(n=1000, ei_profile="canonical")
cfg = cfg.set_emitter("izhikevich","cortical_eig").probes(["spikes"],n_contacts=16).field(domain="laminar_column", conductivity="proxy", boundary="mean_zero_neumann")
model = jtfne.construct(cfg)
data = collect_column_viewer_data(model) # no simulation, reads realized EdgeList
render_column_viewer(model, output_path="artifacts/column_viewer_canonical_1000n.html")
# Check: data["realized"]["n_edges"] == int(model.params["edge_list"].n_edges)
# and edge_category_counts sum to n_edges.
No kernel or sampler was changed to build this viewer. The HTML is self-contained (Plotly.js via CDN) — open it in a browser, no Python server needed. Re-render with any Model (laminar, multi-area, neuronal tensor, HDP) without re-running a simulation.