Skip to main content

JAX Field Neural Equations: a source-to-field neurophysiology engine for TFNE models.

Project description

jaxfne

JAX-native tensor-field source-to-field/readout workflows for multimodal neural simulations.

PyPI Docs Python

Links: Documentation · PyPI · GitHub Releases · Tutorials · Issues

jaxfne provides a practical object-oriented API for building reproducible computational neurophysiology workflows:

Emitter -> Source -> Field -> Probe -> Objective -> Optimizer

Designed for JAX-native source tensors, field/proxy operators, multimodal probe readouts, JSON-safe output bundles, and CPU-first reproducible examples.

Installation

From PyPI:

pip install jaxfne

In Colab:

%pip install jaxfne

From a local checkout:

git clone https://github.com/HNXJ/jaxfne.git
cd jaxfne
pip install -e .

Optional development tools:

pip install -e .[dev]

Optional optimizer / bridge extras are installed only when needed:

pip install -e .[opt]
pip install -e .[jaxley]

Minimal example

import json
import jaxfne as jtfne

cfg = (
    jtfne.configuration()
    .network(
        name="V1_proxy",
        kind="cortical_column",
        n=100,
        layers=["L2/3", "L4", "L5", "L6"],
        cell_types={"E": 0.8, "PV": 0.1, "SST": 0.07, "VIP": 0.03},
    )
    .emitter(family="izhikevich", preset="cortical_eig")
    .field(
        domain="laminar_column",
        conductivity="proxy",
        boundary="mean_zero_neumann",
        gauge="mean_zero",
    )
    .probe(
        name="laminar_probe",
        modes=["spikes", "V_m", "source", "CSD", "LFP"],
        n_contacts=16,
    )
)

model = jtfne.construct(cfg)

sim = jtfne.simulation(
    duration_ms=300.0,
    dt_ms=0.1,
    seed=0,
    record_sources=True,
    record_fields=True,
)

signals = model.simulate(sim)
receipt = model.run_receipt(signals)

readouts = model.compute_readout(
    signals,
    [
        jtfne.readout_spec("rate", "spike_rate_hz"),
        jtfne.readout_spec("source", "source_abs_mean"),
        jtfne.readout_spec("csd", "csd_abs_mean"),
        jtfne.readout_spec("lfp", "lfp_abs_mean"),
    ],
)

manifest = model.manifest(signals, readouts)
json.dumps(manifest, allow_nan=False)

print("jaxfne", jtfne.__version__)
print("spikes:", signals.spikes.shape)
print("Vm:", signals.V_m.shape)
print("source:", None if signals.sources is None else signals.sources.shape)
if signals.field is not None:
    print("LFP:", signals.field.lfp.shape)
    print("CSD:", signals.field.csd.shape)
print("receipt_id:", receipt.receipt_id)
for result in readouts:
    print(result.name, result.metric, result.value, result.status)

What it supports

jaxfne supports compact TFNE-style computational workflows with:

  • Izhikevich emitter scaffolds;
  • dense and edge-list recurrent paths;
  • scan-backed JAX simulation kernels;
  • native stimulus / drive schedules;
  • laminar source geometry metadata;
  • source proxy traces;
  • LFP-proxy and CSD-proxy laminar readouts;
  • readout specifications;
  • objective reports;
  • run receipts;
  • strict JSON-safe manifests;
  • CPU-first validation and optional accelerator execution through JAX.

The standard v0.2.0 field mode is a laminar proxy readout:

source_projection_mode = proxy_no_field_solve
field_solver_status = laminar_proxy_no_pde
field_claim_level = proxy_readout_only

This is the intended basis for practical laminar spectrolaminar proxy simulations.

Scope and capabilities

jaxfne is designed for building and testing source-to-field/readout workflows on CPU-first infrastructure.

Typical uses:

  • Reproducible proxy simulations with local-global organization
  • Source/readout bookkeeping and JSON-safe output bundles
  • Objective scaffolds and optimization experiments
  • Performance benchmarking with deterministic PRNG
  • Integration with Jaxley-style models and other JAX workflows

Default readouts are computational proxies. Physical-unit EEG/MEG/LFP/CSD workflows require appropriate geometry, calibration, and validation for the intended use. See Scope and limitations for details.

Documentation

Full documentation, tutorials, guides, and API reference are available at:

jaxfne.readthedocs.io

Or in the docs/ directory of the repository.

Package layout

jaxfne/
  __init__.py     public API exports
  core.py         configuration, model, simulation, signals, receipts, readouts
  emitters.py     Izhikevich and recurrent emitter kernels
  fields.py       laminar proxy source/field/readout logic
  objectives.py   objective and evaluation scaffolds
  optim.py        optimizer specs and optional Optax guard
  runtime.py      JAX runtime, dtype, device, and reproducibility reports
  io.py           JSON-safe manifests, hashes, save/load helpers
  validation.py   invariant and claim-gate checks
  bridges.py      optional external backend guards

Validation

Core local checks:

python -m compileall -q jaxfne tests examples
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 PYTHONPATH=. python -m pytest -q --tb=short

Run examples:

python examples/00_minimal_column.py
python examples/01_source_field_manifest.py
python examples/02_spectrolaminar_oddball_scaffold.py

Documentation

Release notes and detailed version history live outside the README:

  • CHANGELOG.md
  • docs/
  • examples/
  • scripts/benchmark_scan_backends.py

License

MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jaxfne-0.2.18.tar.gz (258.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jaxfne-0.2.18-py3-none-any.whl (64.3 kB view details)

Uploaded Python 3

File details

Details for the file jaxfne-0.2.18.tar.gz.

File metadata

  • Download URL: jaxfne-0.2.18.tar.gz
  • Upload date:
  • Size: 258.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for jaxfne-0.2.18.tar.gz
Algorithm Hash digest
SHA256 5da8e46099ef76430e4009052717a2be81e61594d6b3914ee6cd57a0ad3a1a84
MD5 2167a72eeb5316b2359376db5eaa74e2
BLAKE2b-256 4aca31dae37775e4d794bd55b7743c9daf4953ccd71ee9ca4c713d715edd43c2

See more details on using hashes here.

File details

Details for the file jaxfne-0.2.18-py3-none-any.whl.

File metadata

  • Download URL: jaxfne-0.2.18-py3-none-any.whl
  • Upload date:
  • Size: 64.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for jaxfne-0.2.18-py3-none-any.whl
Algorithm Hash digest
SHA256 6f7f2e93c5544d693621216908e656016a7f0bee00203852a81cca10f7b8188e
MD5 0439d7c04d4899df65090672ac50c17e
BLAKE2b-256 6bce1e3fde330bc827a77087d12aa844f0048fb37aef009112c660a55b398871

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page