Skip to main content

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

Project description

jaxfne

JAX Field Neural Equations (jaxfne) is a compact JAX-native source-to-field/readout engine for Tensor-Field Neural Equations (TFNE).

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

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

jaxfne is designed for laminar proxy simulations, source-field metadata, readouts, objective reports, receipts, manifests, and benchmarkable JAX execution paths.

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.10.tar.gz (210.2 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.10-py3-none-any.whl (60.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jaxfne-0.2.10.tar.gz
  • Upload date:
  • Size: 210.2 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.10.tar.gz
Algorithm Hash digest
SHA256 9baa318cb38f5df1cb26571025a0c940fd977e699996a06fe90d101f8f6e9868
MD5 2459b5c2ff47916f56bf83a98ded95a2
BLAKE2b-256 a5152718a09d299d4bc93bf088aded92bcea6c958a9e2d2b7c850bc8c1d46d53

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jaxfne-0.2.10-py3-none-any.whl
  • Upload date:
  • Size: 60.1 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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 914e71ad0629a5959ef8aac3d12d064ab7fb2fbb7cd05598373a2fbcc96cd477
MD5 b7cbe2961b60cccf7f9f8bb62898abfc
BLAKE2b-256 f771ac1f123a0194412cdaa7323b3b2384fc3b61f5002516488d3b0eae394d33

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