Changelog
v0.4.4 (2026-06-21)¶
Multi-area études + a real fix to inter-area connectivity. Études 6 and 7 are implemented (previously placeholders), built on the built-in Izhikevich emitter and the canonical E:I profile. Implementing them surfaced and fixed genuine bugs in the multi-area connectivity path.
Fixed¶
inter_column_connectivitynow accumulates specs instead of overwriting — multiple calls (one per directed projection) all materialize. Previously every call replaced the single metadata key, sobuild_multi_area_columnswired only the last adjacent pair.build_multi_area_columnswires each adjacent pair in both directions: feedforward lo→hi (L2/3 → L4) and genuine top-down feedback hi→lo (L6 → L1/L5). Itsp_feedbacknow produces real top-down edges._interarea_Wlayer matching tolerates the merged 5-layer scheme ("L2/3") as well as split"L2"/"L3"columns, so feedforward from superficial layers wires under the defaultDEFAULT_LAYERS.
Added¶
- Étude 6 — Multi-Area Network: V1→V2→V4→PFC hierarchy with feedforward + feedback, inter-areal connectivity census, interactive 3D layout, per-area depth rasters, and an async-irregular (κ) gate.
- Étude 7 — Multi-Trial Spectrolaminar Motif: multi-trial depth × frequency relative power on a 1k canonical column, with the synchrony (κ) trust gate and the scale-emergent crossover caveat.
v0.4.3 (2026-06-21)¶
Jaxley emitters reach the field stage, plus the flagship Configuration Grammar guide. A Jaxley Hodgkin–Huxley network can now drive a laminar LFP/CSD readout from a physically meaningful generator — its reconstructed transmembrane ionic current — closing Emitter → Source → Field → Probe for the Jaxley bridge. jaxfne is the mathematical backend; the biophysical fidelity of the readout follows the model you provide.
Added¶
JaxleyBridge.simulate_laminar_field(...)— run a Jaxley HH model and returnSignalswith a laminarFieldOutput(lfp_proxy/csd_proxy/...). The source is the reconstructed HH ionic currentI_Na + I_K + I_Leak(from recordedHH_m/HH_h/HH_ngating states + channel params), projected viaproject_laminar_sources.signals.get("lfp_proxy")andjaxfne.vis.lfp/csdwork directly on the result. Izhikevich/Fire are non-capacitive (zero current) and raise a clear error.normalize_depthoption (default on) min-max rescales the depth axis to[0, 1]so arbitrary-scale (µm) Jaxley geometry maps onto the projection's contact span instead of collapsing onto one contact; the raw range is preserved in metadata.- Configuration Grammar guide — the flagship documentation:
Configurationframed as the compiler whose declarative specification compiles into the Emitter→Source→Field→Probe→Objective→Optimizer→Manifest chain, with each of the eleven sections mapped to its real fluent method and described as a biophysical-specificity dial. - Homeostasis guide — the homeostatic excitability controller (one parameter
k_gain,k_gain=0null), covering both the built-in per-step kernel (runtime(enable_homeostasis=True, homeostasis_params=...), diagnostics viamodel.last_homeostasis_diagnostics()) and the Jaxley outer-loop windowed controller. - Bridges API reference (
api/bridges.md) —require_jaxley/clip shim,jaxley_to_signals, and all threeJaxleyBridgerun modes.
v0.4.2 (2026-06-20)¶
Homeostatic numerical stability — hard-bounded, float32-safe emitters. Enabling the homeostatic mode (one knob, gain k≈1.0) keeps each emitter in a stable operating regime AND hard-bounds its state, so a single neuron or simple component can never overflow or underflow in float32. The same mode eliminates hyperactivity and hypoactivity and provides short-term adaptation. Proxy/scaffold gates unchanged.
Added¶
- Hard state bounds in the built-in Izhikevich homeostatic kernel (
v_floor/v_ceiling/u_abs_max/syn_abs_max, tunable viahomeostasis_params) — set far outside normal dynamics, so they never alter behaviour, only catch overflow/underflow. State stays finite in float32 under any finite (or even±inf) input current. JaxleyBridge.simulate_homeostatic(..., current_clip_nA=, strict_finite=)— the injected current is hard-bounded to keep the implicit solver away from overflow; output finiteness is verified (raises in strict mode rather than silently masking). Metadata recordsstate_hard_boundedandall_finite.
Notes¶
- The bounds are a safety net: in the normal regime the clamps stay inactive.
v0.4.1 (2026-06-20)¶
Jaxley emitters become a first-class path, with tfne homeostasis on top. Proxy/scaffold gates unchanged.
Added¶
jaxley_to_signals(module, recordings, dt_ms=...)— convert ajaxley.integraterecordings array(n_rec, n_time)to a jaxfneSignals, pulling recorded-compartment xyz frommodule.nodesinto metadata for downstream projection (exported at the root).JaxleyBridge.simulate(...)— run a Jaxley model end-to-end (stablebwd_euler) and return proxySignals(previously a placeholder).JaxleyBridge.simulate_homeostatic(...)— outer-loop windowed homeostatic excitability controller around a Jaxley emitter, applying tfne's restoring-bias lawg = clip(k_gain·(target_rate_hz − r), g_min, g_max)as a per-cell current via grad-safedata_stimulate, stitched with continuous state resume. Computational control proxy only (biological_learning_claim=False,mechanism_claim_status="not_claimed").hh_jaxley_reference_trace(...)— real single-compartment Hodgkin–Huxley reference trace (previously a placeholder).- ED10 release-archive receipt (
scripts/ed10_release_archive_receipt.py) — binds release identity + truth gates to content hashes of the upstream evidence bundle (ED9), then self-hashes.
Fixed¶
require_jaxley()lazily installs a backward-compatiblejnp.clip(a_min=/a_max=)shim so Jaxley (≤0.13) channel emitters integrate on current JAX (the shim self-disables when Jaxley adoptsmin=/max=). Metadata recordsjax_clip_compat_installed.
Changed¶
jaxleyoptional-dependency extra floored to>=0.13.0(tested version).- CI now installs the
jaxleyextra so the Jaxley integration is exercised (drift-tested) on every push.
v0.4.0 (2026-06-18)¶
Fluent Configuration grammar + proxy-only probe vocabulary.
Added¶
Configuration.geometry(layer_thickness=...)— declare laminar geometry from per-layer thickness (normalized to cumulative z-intervals).Configuration.population(N, neurons={...})— per-layer neuron budget decoupled from thickness (largest-remainder allocation; oneNper area).- Real inter-area edge wiring in
Configuration.inter_column_connectivity(...): materializes cross-area synapses with anatomical routing (feedforward L2/3→L4, feedback L6→L1/L5) and an explicitlayer_to_layer_mapoverride.
Changed (breaking)¶
- The
*_likeprobe vocabulary (lfp_like/csd_like/eeg_like/meg_like) is fully retired with no aliases. Use*_proxynames only; signal access and probe declarations reject*_likewith a clear pointer to the*_proxyname.
Fixed¶
- CI workflow
scope:→strategy:(matrix jobs now run); retired-term doc guard; mkdocs strict-build links. - Updated all tutorial notebooks to execute against the current API.
Scope¶
- Outputs remain proxy readouts (
field_solver_status=linear_solver,physical_amplitude_calibrated=false). No scientific-claim escalation.
v0.3.42 (2026-06-14)¶
Public context hardening release.
- Added missing docstrings to stub emitters (GLIFEmitter, LIFEmitter).
- Enforced clean-venv lazy root imports to guarantee heavy optional packages are not loaded on import.
- Harmonized version references across documentation, package configurations, and tests.
v0.3.41 (2026-06-14)¶
Port of JAX computational kernels. No scientific-claim escalation.
Added¶
- JAX spectral analysis functions:
spectrolaminar_psd_jax,bandpower_jax,spectrolaminar_readout_kernel_jax,spectrolaminar_similarity_kernel_jax, and vectorized batched variantsspectrolaminar_similarity_candidates_jax,spectrolaminar_similarity_candidates_seeds_jax. - Tensorized static-shape connectivity rule compilation kernel
compile_connection_rules_jax. - JAX-optimized activity-dependent STDP synaptic weight update kernel
update_stdp_weights_jax. StimulusSchedule.to_array_jaxfor compiling event schedules into JAX arrays.- Auto-JIT cache warming compile tracking under
Model._warmup_timesduring JIT initialization. - Experimental volume conductor loud-fail skeleton
solve_volume_conductor_experimentalthat raisesNotImplementedErrorpending boundary/gauge/calibration validation.
Scope¶
- Outputs remain proxy readouts (
linear_solver,physical_amplitude_calibrated=false).
v0.3.40 (2026-06-13)¶
Pre-0.4.0 hardening + device flexibility. No scientific-claim escalation.
Added¶
RuntimeConfig.backend(cpu/gpu/tpu) is now honored for device placement —simulate()pins compile+execute viajax.default_device;runtime_report()reportsbackend_enforcedby device availability (honest downgrade when absent). dtype (float32/float64) and jit remain per-RuntimeConfigadjustable.- Accurate docstrings for all public
jaxfne.__all__members; fail-loud pre-0.4 physical-solver placeholder inexperimental_hpc(raises until a validated solver exists — the stable path stayslinear_solver).
Changed¶
- Repo hygiene: root thinned; non-public planning/roadmap material removed from the published repository.
Scope¶
- Outputs remain proxy readouts (
linear_solver,physical_amplitude_calibrated=false); computational scaffold only.
v0.3.39 (2026-06-13)¶
Stable release: packaging/docs/PyPI consolidation of the v0.3.37–v0.3.38 quality line. No new APIs, no solver work, no scientific-claim escalation.
Summary of the v0.3.37 → v0.3.39 quality line¶
- v0.3.37 — docs comparison: strict notebook grammar, root export grammar,
scope/truth-gate cells,
*_proxynaming, API index regenerated. - v0.3.38 — root-export hardening: the six export helpers (
save_figure,save_figures,export_report,export_tutorial_artifacts,plot_raster,plot_spectrolaminar_suite) promoted to formaljaxfne.__all__members (len(__all__)179 → 185); clean-venv root-import laziness verified. - v0.3.39 — stable packaging: version bump to
0.3.39across pyproject/core/mkdocs/docs; wheel + sdist rebuilt andtwine-checked; published to PyPI, GitHub Release, and docs.
Validation¶
- Targeted pytest,
mkdocs build --strict, andcompileallpass. - Root import loads no
matplotlib/plotly/pandas/optax/jaxley/pynwb. - API index count equals runtime
len(jaxfne.__all__)= 185.
Scope¶
- Outputs remain proxy readouts (
linear_solver,physical_amplitude_calibrated=false); computational scaffold, not a calibrated biological simulator.
v0.3.37 (2026-06-13)¶
Release: Strict notebook grammar + truth gates. Published to PyPI (wheel +
sdist), GitHub Release (tag v0.3.37, commit 49aa025), and docs.
Added¶
- Root-level export grammar:
save_figure,save_figures,export_report,export_tutorial_artifacts,plot_raster,plot_spectrolaminar_suite— the canonical replacement for directmatplotlib/jsoncalls in release-facing notebooks. - Scientific scope cells in all 15 release-facing tutorials documenting
computational_scaffold/proxy_readoutstatus, local nonlinearity, global linearity, and thephysical_amplitude_calibrated = Falsetruth gate.
Changed¶
- Strict notebook call grammar: root-level
jtfne.<fn>()only (nojtfne.vis.*/jtfne.tutorial_utils.*in public notebooks). - Tensor-field naming standardized to
*_proxy(e.g.LFP-proxy,CSD-proxy); public*_likewording removed.
Validation¶
- 2284/2284 tests pass;
mkdocs build --strictpasses;twine checkpasses on both artifacts. - Truth gates enforced:
field_solver_status = "linear_solver",physical_amplitude_calibrated = False; no physical EEG/MEG/LFP/CSD measurement wording.
Scope¶
- Outputs remain proxy readouts (
linear_solver,physical_amplitude_calibrated=false); the package is a computational scaffold, not a calibrated biological simulator.
v0.3.26 (2026-06-02)¶
Feature release: Multi-area laminar workshop — inter-area connectivity, lesioning, AGSDR tuning, waveform explorer.
Added¶
- Global multi-area network in
simulate_laminar_trialswith within-area recurrence + inter-area projections (connectivity_spec) and lesioning (lesion_spec); per-area depth leadfield. Defaults: feedforward V1 L2/3 (E) → V4 L4, feedback V4 L2/3 (E) → V1 L5/6. - Per-cell-type Izhikevich overrides (
cell_type_izh_params, wider "E-Wide" default),single_cell_waveforms, andtune_laminar_agsdr(AGSDR tuning of firing rate + kappa). - Étude No. 1 rebuilt as a two-area Colab-ready customizable workshop notebook.
Fixed¶
- Trial-averaged spectral power (per-trial PSD then mean); relative-power-density cross; uniform
dt_mskwarg across vis plotters; example API drift; GHAcheckout@v5/setup-python@v6.
Scope¶
- Proxy readouts only (
linear_solver,physical_amplitude_calibrated=false); spectrolaminar motif is emergent, not imposed.
v0.3.25 (2026-06-01)¶
Feature release: Cylindric scaffold, spectrolaminar motif, and 32-contact LFP artifacts.
Added¶
- Cylindric scaffold geometry: per-area vertical cylinders (circular x-y cross-section, depth on z);
visualize_network_3dgainscolumn_shape="cylinder"shells and per-cell-type marker symbols. - Genuine per-area three-panel spectrolaminar suite (cell density, relative power spectrum, alpha-beta/gamma crossing) with smoothed band profiles.
- 32-contact LFP/spectrolaminar artifacts: equal-spaced contacts, robust relative-power normalization excluding degenerate low-power channels, 32-channel stacked LFP waterfall.
Fixed¶
- Notebook controls for trials, contacts, and per-layer cell-type fractions; CI dev-extra (
ipykernel) for slow notebook-execution tests.
Scope¶
- Outputs remain proxy readouts with
field_solver_status=linear_solverandphysical_amplitude_calibrated=false.
v0.3.24 (2026-06-01)¶
Release candidate: Compact Etude No. 1 tutorial utilities and Colab-ready visualization flow.
Added¶
jaxfne.tutorial_utilshelpers for laminar column configuration, adjustable model scale, cell-type distributions, stimuli, trial simulation, spectrolaminar summaries, and strict artifact export.jaxfne.vistutorial panels for 3D scaffold, activity traces, and three-panel spectrolaminar figures.- Thin Etude No. 1 notebook using
import jaxfne as jtfneand package-level helper calls.
Fixed¶
- Preserved root
build_laminar_columnwhile addingbuild_tutorial_laminar_columnas an unambiguous tutorial alias. - Restored optional dependency isolation: core import does not require pandas, matplotlib, plotly, or ipywidgets.
- Added per-area LFP/CSD tensor shape
(trials, areas, T, contacts)and area-tagged spectrolaminar specs.
Scope¶
- Outputs remain proxy readouts with
field_solver_status=linear_solverandphysical_amplitude_calibrated=false.
v0.3.22 (2026-05-31)¶
Patch release: Fix jtfne.vis.visualize_network_3d missing from PyPI wheel.
Fixed¶
jaxfne/vis/__init__.pynow exportsvisualize_network_3din the published wheel. The v0.3.21 PyPI wheel was built beforevisualize_network_3dwas added to the vis subpackage export list; v0.3.22 corrects this.- Etude No. 1 notebook: install cell updated to
--force-reinstall --no-cache-dirto prevent stale Colab runtime cache from shadowing the fix. - Etude No. 1 notebook: install verification cell raises
RuntimeErrorwith clear path/version diagnostics if the installedjtfne.visis still missing the function. - Network visualization cell now catches both
ImportErrorandAttributeErrorand falls back to a staticgeometry3dPNG so the notebook completes regardless.
Added¶
tests/test_vis_network3d_public_api.py— 5 regression tests that enforce thejtfne.vis.visualize_network_3dexport contract. CI now fails loudly if this public API is ever dropped from the package.
v0.3.21 (2026-05-30)¶
Release: Etude No. 1 completion and notebook template standardization.
Added¶
- Added Etude No. 1 as an advanced multi-laminar cortical AGSDR workflow under
tutorials/etudes/. - Added a canonical notebook template under
tutorials/templates/with unified setup, truth gates, and placeholder configuration. - Added a template guide for Suites and Etudes.
Changed¶
- Cleaned duplicated Etude notebook artifacts.
- Moved release/comparison receipts into
internal_docs/release_receipts/. - Updated release checklist and agent status metadata for the v0.3.21 release candidate.
Validation status¶
- Package import and compile gates pass.
- Etude and template notebooks pass structural hygiene checks.
- Maintains
`,computational_scaffold,field_solver_status=linear_solver, andphysical_amplitude_calibrated=false`.
v0.3.19 (2026-05-30)¶
Release: Field proxy boundary handling improvements.
- Optimized
project_laminar_sourcesboundary fallbacks for low contact counts. - Added comprehensive boundary and stencil numerical parity tests.
- Maintains
`,linear_solver` status.
v0.3.18 (2026-05-30)¶
Release: Sharding infrastructure for multi-device AGSDR.
- Added
jaxfne/sharding_utils.pywith distributed mesh and NamedSharding stubs. - 14 new tests for sharding context and single-device fallbacks.
- Sharding stubs do not yet drive multi-device dispatch (reserved for v0.3.20+).
v0.3.17 (2026-05-30)¶
Release: Dtype inheritance in AGSDR optimization.
- Updated AGSDR loop to inherit dtype from bounds, not force float32.
- Applied dtype-inheritance to noise generation, W_init, and delta-rule center updates.
- 12 new tests covering dtype invariants and candidate clipping.
v0.2.3 (2026-05-19)¶
Release: Stable proxy operators and documentation infrastructure.
- Added MkDocs-based documentation site with Material theme
- Reorganized docs: tutorials, guides, API reference, about
- Added Jaxley interoperability documentation
- Cleaned public documentation (removed internal metadata)
- 492 tests passing
v0.2.1 (2026-05-10)¶
- Introduced probe operator contracts
- Added status metadata
- Eight canonical readout channels
v0.2.0 (2026-04-15)¶
- Initial release
- Izhikevich emitters
- Laminar field solver (proxy)
- Basic readout operators