Change log#

↗️ = updated since previous release

v2026.7.9#

This maintenance release advances three ecosystem components to their latest releases — BrainEvent 0.1.2, BrainTrace 0.2.4, and BrainPy 2.8.1 — and pins Optax >= 0.2.8 as an explicit supporting dependency for the gradient-based tooling. The bumps are mutually consistent: BrainTrace (from 0.2.3) now depends on BrainEvent at runtime — its sparse_matmul operand must be a brainevent.DataRepresentation — and BrainEvent 0.1.2 lands the batched dt2t operators that implement the D-RTRL eligibility-trace update BrainTrace drives, so the two move together and the pinned set stays coherent.

  • Package Dependencies:

  • BrainEvent 0.1.2 — batched dt2t operators, naming cleanup, GPU fixes:

    • Adds batched (mm) variants of the per-synapse dt2t operators — csrmm_dt2t / cscmm_dt2t (CSR/CSC) and fcnmm_dt2t (fixed-connection-number / ELL) — implementing the batched Dᵗ εᵗ⁻¹ term of the D-RTRL eligibility-trace update εᵗ Dᵗ εᵗ⁻¹ + diag(D_fᵗ) xᵗ, with numba (CPU), cuda_raw (GPU), and jax_raw (CPU/GPU/TPU) kernels plus JVP rules

    • Folds the DT2T / DT_to_T naming convention into a single lowercase dt2t spelling across the public API (the JIT-connectivity variants gain an mv infix: jitnmv_dt2t / jitsmv_dt2t / jitumv_dt2t) and consolidates the GPU cuSPARSE SpMV/SpMM backends under one 'cusparse' selector — a rename with unchanged behavior. Breaking: no compatibility aliases are kept, so call sites must be updated (the default 'cuda_raw' GPU backend is unaffected)

    • Fixes several GPU-only autodiff and output-shape defects in the event-driven CSR and fixed-connection-number kernels

  • BrainTrace 0.2.4 — online learning through JAX control flow (spans 0.2.3 and 0.2.4):

    • Control-flow-aware compilation: ETP operations inside vmap, cond, scan / brainstate.transform.for_loop, and weight-free while bodies now participate in online learning via a new canonicalization + descent pipeline, so recurrent cells built with control flow no longer silently drop parameters from the trace graph; the compiler is now deterministic across processes and transparently inlines user jax.jit bodies

    • New ETP operators: grouped_matmul, embedding, and einsum, each with hand-written ETP rules, a matching braintrace.nn layer (GroupedLinear, Embedding), and single-step BPTT-oracle coverage; the D-RTRL multi-step trace update is chunk-factorized for a 2.4–4.5× speedup on multi-step windows

    • Parameter-transform hooks (from 0.2.3): optional, shape-preserving weight_fn / bias_fn / kernel_fn hooks on the ETP operators apply a transform to a trainable parameter before it enters the op while the eligibility trace and gradient stay with respect to the raw stored parameter (D-RTRL matches backprop-through-time for non-identity transforms); threaded through the braintrace.nn linear layers

    • Correctness & contract: a full _op / _algorithm audit closes 24 findings. Breaking: element_wise renames fnweight_fn, sparse_matmul renames weight_dataweight, and sparse_matmul now requires a brainevent.DataRepresentation operand (brainunit u.sparse types are no longer accepted), which adds brainevent as a runtime dependency

  • BrainPy 2.8.1 — second audited correctness sweep:

    • A library-wide bug-fix sweep (#868) fixes 18 confirmed defects — each backed by a co-located regression test — across dnn, the integrators, encoders, initializers, connectivity, optimizers, dynold short-term plasticity, the offline / online training algorithms, the object-transform layer, and the simulation runners

    • Representative fixes: LayerNorm now normalizes over the trailing normalized_shape; a never-spiking WeightedPhaseEncoder and a PoissonGroup spiking regression; the Stratonovich Euler–Heun predictor sqrt(dt) scaling; the MomentumNesterov look-ahead and Adadelta learning rate; a Ridge / LinearRegression IRLS seed that returned the untrained initial weights; and adaptive pooling on up-sampling

    • Drives package-wide mypy to zero errors and moves __version__ / __version_info__ into a dedicated brainpy._version module

  • Optax pinned explicitly:

    • optax>=0.2.8 is now listed directly in requirements.txt (previously pulled in transitively) so the gradient-based tooling — e.g. BrainMass’s Optax Fitter and the BrainTools optimizers — installs deterministically with the bundle

v2026.6.29#

This is a maintenance and refinement release. It refreshes two ecosystem components to their latest releases — BrainState 0.5.2 and BrainTrace 0.2.2 — slims the bundled dependency set by removing pinnx, and adds a cross-package compatibility / correctness test suite that exercises the pinned stack end-to-end. The two component bumps are coupled: BrainTrace 0.2.2 requires BrainState >= 0.5.2, and BrainState 0.5.2’s new in_new_state_probe() is exactly the hook BrainTrace’s unified compile path uses to cooperate with the eager state-discovery probe — so the pinned set stays mutually consistent.

  • Package Dependencies:

  • BrainState 0.5.2 — additive transform feature:

    • Adds brainstate.transform.in_new_state_probe(), a public predicate that lets state-bound, one-shot consumers cooperate with the eager discovery probe that vmap_new_states / vmap2_new_states / pmap2_new_states run to enumerate the states a function creates before the real mapped pass

    • Implemented as a thread-local depth counter, so it composes under nested *_new_states calls and resets cleanly even if the probe raises

    • No public API is removed or renamed, and behavior is unchanged for code that does not call the new helper; 28 new regression tests, green on the JAX 0.7–latest matrix and the type-check gate

  • BrainTrace 0.2.2 — unified online-learning entry point and vmap fixes:

    • braintrace.compile(model, algorithm, *example_inputs, ...) is now the canonical single call for building a compiled eligibility-trace learner — it always initializes states, accepts seed / verbose, adds a vmap= option for per-sample state initialization, and exposes a structured CompilationReport

    • Adds a recurrent mixing mode to graph construction, broadening the set of cell topologies the compiler can connect

    • Fixes eligibility-trace convergence under vmap / brainstate.mixin.Batching() by deferring compilation during the discovery probe (aligning convolutional and element-wise traces), and routes LoRA through the ETP lora_matmul primitive so its factors participate in trace learning

    • Migrates unit handling from saiunit to brainunit (a re-export, so it is drop-in), raises the brainstate floor to >= 0.5.2, targets Python 3.14, and renames private modules (_etrace_*_*); 1604 tests pass and the documented 0.2.x public API is unchanged

  • Removed pinnx from the bundled set:

    • The default brainx install now scopes to the core brain-simulation stack; PINNx (physics-informed neural networks) remains a fully supported, independently released ecosystem project and can still be installed on its own with pip install pinnx

  • Cross-package compatibility testing:

    • Adds BrainX/compatibility_test.py, a co-located suite that imports the pinned packages together and drives small, deterministic computations across package boundaries: a unit-carrying brainstate state integrated by transform.for_loop, brainevent event/sparse operators checked against dense references, braintools initializers/metrics, a brainpy.state neuron step, a braincell.SingleCompartment integration, a brainmass mean-field run, and the braintrace.compile eligibility-trace path on BrainState 0.5.2

    • Tests are now co-located beside the package in the suffix style: the legacy BrainX/tests/test_version.py becomes BrainX/version_test.py (the tests/ folder is removed), it drops its pinnx import and pin and now also imports braintrace, and pyproject.toml configures pytest to collect *_test.py

v2026.6.19#

This is a landmark release: the first fully integrated and compatibility-hardened BrainX collection. Every pinned component has been independently audited for correctness, retested, and aligned to a single, mutually-consistent dependency contract — resolving the cross-package incompatibilities and latent numerical bugs that affected earlier mixed-version combinations. The result is the most complete and stable BrainX stack to date, spanning the full modeling spectrum: from morphologically detailed single-cell modeling (dendritic, multi-compartment), through point-neuron network simulation, to neural-mass / firing-rate whole-brain modeling — all differentiable, unit-aware, and built on a shared JAX foundation.

  • Package Dependencies:

  • BrainCell 0.1.0 — multi-compartment, morphologically detailed neurons:

    • Evolves from single-compartment Hodgkin–Huxley into a complete multi-compartment framework: a Cell declaration frontend, a frozen RunnableCell runtime, and a high-level rcell.run(dt=, duration=) driver returning a structured RunResult

    • Immutable morphology layer (Soma / Dendrite / Axon / BasalDendrite / ApicalDendrite / CustomBranch) plus a mutable Morphology tree

    • Pure-functional control-volume discretization with composable policies (CVPerBranch, DLambda, MaxCVLen) and an execution-graph compute runtime

    • Declarative mechanism system (braincell.mech), morphology IO (braincell.io: SWC / ASC / NeuroML2 readers, NeuroMorpho.Org client), location/region filters, and a 2D/3D visualization stack (matplotlib, PyVista, Plotly)

    • Added cerebellar dynamics (Purkinje-cell comparison scaffold); package now PEP 561-typed

  • BrainMass 0.1.1 — differentiable whole-brain modeling:

    • Turns a library of neural-mass models into an end-to-end simulate → observe → score toolkit (introduced in 0.1.0), with gradients flowing through the entire pipeline so parameters can be recovered by gradient descent

    • High-level Simulator, Network, and Fitter (gradient-based Optax, gradient-free Nevergrad, and Bayesian scikit-optimize backends)

    • Seven new literature-faithful mean-field models (Epileptor, Larter–Breakspear, Coombes–Byrne, Generic 2-D oscillator, Wong–Wang E/I, Lorenz, Linear) — 17 model families total — plus nonlinear couplings, an HRF-BOLD forward model, and composable differentiable objectives (time-series RMSE, FC, FCD)

    • Bundled datasets, optional viz helpers, list_models(), and a new Diátaxis-organized documentation site

    • 0.1.1 raises the braintools constraint to >=0.3.0 (the release that fixed the init.param batched-init regression), so brainmass co-installs with brainpy 2.8.0 across the ecosystem

  • BrainPy 2.8.0 — library-wide correctness sweep and static typing:

    • Audited bug-fix pass across neuron/synapse dynamics, ODE/SDE/FDE integrators, the math and object-transform layer, dnn layers, optimizers, losses, analysis, and runners — each fix backed by regression tests (notably a CondNeuGroup synaptic-current scaling error that attenuated currents ~1000×)

    • Static typing with a new mypy CI gate (PEP 561); coverage raised from ~84% to 92%+; tests co-located as <module>_test.py

    • Removed forked internals by reusing the shared braintools (init, metric, surrogate) and brainstate (transforms) implementations

  • BrainTools 0.3.0 — completed correctness, coverage, and documentation audit:

    • Completes the codebase-wide audit campaign begun in 0.2.0 across metric, trainer, optim, visualize, surrogate, quad, init, conn, file, and cogtask, lifting per-module coverage to ~92–100%

    • Corrected genuine numerical/algorithmic bugs: inverted surrogate-gradient formulas, an nll_loss sign error, LFP coherence identically 1, He/Kaiming initialization variance off by 2×, double-applied SM3 momentum, a centered RMSprop that was a silent no-op, and dropped cogtask.Parallel branches

    • New/restored public API: file.save_matfile, gradient accumulation and name-based parameter freezing in trainer, an LBFGS line-search, exported metric.safe_norm / pairwise-cosine helpers, cogtask.create_task, and metric.L1Loss

  • BrainState 0.5.1 — JAX 0.10.2 compatibility:

    • Fixes the vmap regression caused by JAX 0.10 removing jax.interpreters.batching.not_mapped; the unvmap primitives now resolve the sentinel version-agnostically (full suite: 5312 passed). No public API changes; compatible across jax>=0.7.0

  • BrainEvent 0.1.1 — custom-operator / FFI hardening:

    • Audit of the JAX custom-op / FFI layer fixed ~30 defects that produced silently-wrong output or process crashes (proper XLA_FFI_Error propagation, fp16/bf16/complex handling, a multi-GPU device-binding race, corrected indptr / CSC construction)

    • The numba FFI bridge now works across jax 0.7–0.9 (not only 0.10+), and compatibility with newer JAX is restored. No public API changes

  • BrainTrace 0.2.1 — ecosystem dependency compatibility:

    • Adopts brainstate 0.5’s typed (PEP 561) surface (clearing 154 mypy errors), updates for hardened convolution validation, and fixes pytest 9.1 collection (1367 passed, mypy clean, py.typed shipped). No functional/API changes

  • BrainUnit 0.5.1 — unit-contract compatibility patch:

    • Resolves the upstream saiunit / brainunit unit-contract issue surfaced across the ecosystem (the rtol dimensionless / atol unit-carrying convention), keeping numerical-tolerance handling consistent with braintrace 0.2.1 and brainevent 0.1.1. No public API changes

  • Cross-ecosystem compatibility:

    • BrainState 0.5.1, BrainUnit 0.5.1, BrainEvent 0.1.1, and BrainTrace 0.2.1 jointly resolve the JAX 0.10.x vmap / FFI regressions and the saiunit tolerance-unit contract, while BrainPy 2.8.0 and BrainTools 0.3.0 eliminate forked-internals drift by reusing the shared braintools / brainstate implementations. Earlier mixed-version stacks could surface AttributeError under vmap, silently-wrong FFI results, or unit-handling crashes — all addressed here

    • BrainMass 0.1.1 raises its braintools floor to >=0.3.0 (matching BrainPy 2.8.0’s requirement), resolving the last braintools version conflict so the entire pinned set co-installs cleanly. The combination was validated end-to-end: the full BrainMass test suite (692 tests) passes against this exact dependency set

v2026.6.18#

This maintenance release upgrades BrainPy-State to its 0.1.0 release.

v2026.6.14#

This maintenance release upgrades BrainState to its 0.5.0 release.

v2026.6.11#

This maintenance release refreshes the pinned infrastructure component versions.

v2026.6.8#

This release ships inline type information (PEP 561), consolidates the continuous integration workflows, completes the repository rename to brainx, and refreshes the pinned component versions.

  • Package Dependencies:

  • Typing:

    • Added a PEP 561 py.typed marker so that downstream type checkers (mypy, pyright) treat BrainX as a typed package

    • Declared py.typed as package data in pyproject.toml so it ships in the wheel

  • Continuous Integration:

    • Merged the push/pull-request workflow and the scheduled workflow into a single CI.yml

    • The cross-platform test suite (Linux, macOS, Windows) runs on push, pull request, and manual dispatch

    • A JAX-version compatibility matrix (0.7.1, 0.8.0, 0.9.0, and latest) runs on a daily schedule and on manual dispatch

  • Repository:

    • Renamed the GitHub repository from brain-modeling-ecosystem to brainx; updated all source, documentation, and packaging URLs accordingly

  • Documentation:

    • Corrected the “Open in Colab/Kaggle” badges in every example notebook to target their actual paths on the main branch

    • Replaced the logo and favicon with hosted WebP assets and removed the bundled 3.5 MB plotly.js

    • Removed unused static assets (legacy PWA manifest, service worker, and stale images)

  • README:

    • Fixed the BrainTrace link, which previously pointed at the renamed brainscale repository

    • Added PINNx to the list of ecosystem components

    • Replaced the broken Read the Docs badge with Documentation and License badges

v2026.3.12#

This release updates package dependencies and drops Python 3.10 support.

v2026.1.31#

This release updates package dependencies and includes extensive documentation formatting improvements.

v2026.1.22#

This release updates braintools package dependency.

v2026.1.21#

This release updates brainpy package dependency.

v2026.1.19#

This release updates package dependencies and CI/CD infrastructure.

v2026.1.16#

This release updates package dependencies, documentation, and copyright notices.

v2025.12.26#

This release updates multiple package dependencies and improves CI/CD infrastructure.

v2025.12.25#

This release updates multiple package dependencies and improves CI/CD infrastructure.

v2025.12.2#

This release introduces BrainTrace (replacing BrainScale) and updates multiple package dependencies.

v2025.10.13#

This is the first release of the complete BrainX ecosystem, integrating multiple packages for comprehensive brain simulation and analysis.

v2025.10.08 (yanked)#

  • Project Updates:

    • First integrative version of the BrainX ecosystem (#40)

    • Rebranded to BrainX and revamped documentation (#23)

    • Updated project description and author details to “BrainX Ecosystem”

    • Added support for CUDA 13 in optional dependencies

  • Documentation Enhancements:

    • Enhanced brain simulation documentation with English and Chinese versions (#36)

    • Added comprehensive core components documentation (#29)

    • Added HH thalamus oscillations notebooks and examples (#31, #32)

    • Updated core components documentation and removed obsolete Golgi file (#33)

    • Added Kaggle dataset download for Golgi cell morphology (#25)

    • Fixed ipython2 lexer to ipython3 in notebooks (#27)

    • Corrected titles and updated references in documentation files

  • Package Dependencies:

    • jax>=0.6.0,<0.8.0 ↗️

    • brainpy==3.0.0 ↗️

    • brainunit==0.1.1 (from 0.0.18)

    • brainstate==0.2.1 ↗️ (from 0.1.10)

    • brainevent==0.0.4

    • braincell==0.0.5 ↗️ (from 0.0.4)

    • braintools==0.1.1 ↗️ (from 0.0.12)

    • brainscale==0.0.11 ↗️ (from 0.0.10)

    • brainmass==0.0.3

  • CI/CD:

    • Bumped actions/setup-python from 5 to 6 (#26)

    • Bumped actions/checkout from 4 to 5

  • Fixes:

    • Updated project name and copyright in conf.py; refactored lexer import (#28)

    • Updated Golgi cell notebook to include Kaggle dataset download and path adjustments

    • Updated index.rst to reference brain_simulation_point_neuron.md (#24)

v2025.9.15#

  • BrainX packages:

    • numpy>=1.15 ️↗️

    • jax>=0.4.35,<0.8.0 ↗️

    • brainunit==0.1.1 ↗️

    • brainstate==0.1.10 ↗️

    • brainevent==0.0.4 ↗️

    • braincell==0.0.4 ↗️

    • braintools==0.0.11 ↗️

    • brainscale==0.0.10 ↗️

    • brainmass==0.0.3 ↗️

    • msgpack>=1.1.0 ↗️

    • matplotlib ↗️