Metadata-Version: 2.4
Name: jaxfne
Version: 0.4.7
Summary: JAX Field Neural Equations: a source-to-field neurophysiology engine for TFNE models.
Project-URL: Homepage, https://github.com/HNXJ/jaxfne
Project-URL: Repository, https://github.com/HNXJ/jaxfne
Project-URL: Documentation, https://jaxfne.readthedocs.io/en/latest/
Project-URL: Issues, https://github.com/HNXJ/jaxfne/issues
Project-URL: Changelog, https://github.com/HNXJ/jaxfne/blob/main/docs/changelog.md
Project-URL: Citation, https://github.com/HNXJ/jaxfne/blob/main/CITATION.cff
Project-URL: Source Code, https://github.com/HNXJ/jaxfne
Author: H N
License: MIT
License-File: LICENSE
Keywords: Izhikevich,JAX,LFP,computational neuroscience,laminar cortex,neural simulation,neuroscience,spectrolaminar
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.10
Requires-Dist: jax>=0.4.25
Requires-Dist: jaxlib>=0.4.25
Requires-Dist: numpy>=1.24
Requires-Dist: scipy>=1.10
Provides-Extra: all
Requires-Dist: h5py; extra == 'all'
Requires-Dist: ipykernel; extra == 'all'
Requires-Dist: ipywidgets; extra == 'all'
Requires-Dist: jaxley>=0.13.0; extra == 'all'
Requires-Dist: kaleido; extra == 'all'
Requires-Dist: matplotlib; extra == 'all'
Requires-Dist: nbclient; extra == 'all'
Requires-Dist: nbformat; extra == 'all'
Requires-Dist: optax>=0.2; extra == 'all'
Requires-Dist: pandas; extra == 'all'
Requires-Dist: plotly; extra == 'all'
Requires-Dist: pytest; extra == 'all'
Requires-Dist: pytest-cov; extra == 'all'
Requires-Dist: pytest-xdist; extra == 'all'
Requires-Dist: pyyaml; extra == 'all'
Requires-Dist: ruff; extra == 'all'
Requires-Dist: zarr; extra == 'all'
Provides-Extra: dev
Requires-Dist: ipykernel; extra == 'dev'
Requires-Dist: ipywidgets; extra == 'dev'
Requires-Dist: kaleido; extra == 'dev'
Requires-Dist: matplotlib; extra == 'dev'
Requires-Dist: nbclient; extra == 'dev'
Requires-Dist: nbformat; extra == 'dev'
Requires-Dist: optax>=0.2; extra == 'dev'
Requires-Dist: pandas; extra == 'dev'
Requires-Dist: plotly; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest-xdist; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: io
Requires-Dist: h5py; extra == 'io'
Requires-Dist: pyyaml; extra == 'io'
Requires-Dist: zarr; extra == 'io'
Provides-Extra: jax-fem
Requires-Dist: jax-fem>=0.0.12; extra == 'jax-fem'
Provides-Extra: jaxley
Requires-Dist: jaxley>=0.13.0; extra == 'jaxley'
Provides-Extra: opt
Requires-Dist: optax>=0.2; extra == 'opt'
Provides-Extra: viz
Requires-Dist: ipywidgets; extra == 'viz'
Requires-Dist: kaleido; extra == 'viz'
Requires-Dist: matplotlib; extra == 'viz'
Requires-Dist: pandas; extra == 'viz'
Requires-Dist: plotly; extra == 'viz'
Description-Content-Type: text/markdown

<p align="center">
  <img src="https://raw.githubusercontent.com/HNXJ/jaxfne/main/docs/assets/jaxfne-itxt.png" alt="jaxfne" width="200">
</p>

<p align="center">
  <a href="https://pypi.org/project/jaxfne/"><img src="https://img.shields.io/pypi/v/jaxfne?color=brightgreen" alt="PyPI package"></a>
  <a href="https://pypi.org/project/jaxfne/"><img src="https://img.shields.io/pypi/pyversions/jaxfne" alt="Python versions"></a>
  <a href="https://jaxfne.readthedocs.io/en/latest/"><img src="https://readthedocs.org/projects/jaxfne/badge/?version=latest" alt="Documentation"></a>
  <a href="https://github.com/HNXJ/jaxfne/actions/workflows/ci.yml"><img src="https://github.com/HNXJ/jaxfne/actions/workflows/ci.yml/badge.svg?branch=dev" alt="CI (fast)"></a>
  <a href="https://github.com/HNXJ/jaxfne/actions/workflows/release_ci.yml"><img src="https://github.com/HNXJ/jaxfne/actions/workflows/release_ci.yml/badge.svg?branch=main" alt="Release CI"></a>
  <a href="https://github.com/HNXJ/jaxfne/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/coverage-reported%20in%20CI-blue" alt="Coverage"></a>
  <a href="docs/contributing.md"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg" alt="Contributions welcome"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License: MIT"></a>
</p>

# jaxfne

**JAX-based simulation of Tensor-Field Neural Equations** — emitter-to-source-to-field
readouts for computational electrophysiology. Define a circuit (single column or
multi-area hierarchy), run it, and inspect population activity, layer-targeted drive,
and field readouts in one pipeline.

jaxfne works at the population/field scale — layer-resolved circuits, spectrolaminar
readouts, a tensor-algebraic source-to-sensor-proxy chain. For single/multi-compartment
biophysical detail, [Jaxley](https://jaxley.readthedocs.io/) is the natural complement,
not a competing tool: Jaxley models plug directly into jaxfne as emitters (see the
Jaxley bridge in [Quickstart](docs/quickstart.md)).

## Install

```bash
pip install jaxfne
pip install "jaxfne[viz]"   # matplotlib/plotly readouts
```

Development checkout: `pip install -e ".[dev,viz]"` after cloning.

## Minimal example

```python
import jaxfne as jtfne

jtfne.enable_x64()
tensor  = jtfne.load_canonical_neuronal_tensor("canonical-v1-column-1000n")
model   = jtfne.construct(tensor, jtfne.RuntimeConfiguration(seed=0, duration_ms=1000.0, dt_ms=0.5))
signals = jtfne.simulate(model)

jtfne.vis.raster(signals)                    # population raster
jtfne.vis.spectrolaminar_suite(signals)      # laminar PSD readout
```

Canonical import: `import jaxfne as jtfne`. More paths (fluent `Configuration`,
multi-trial sweeps, HDP plasticity, Jaxley bridge): **[Quickstart](docs/quickstart.md)**.

## Scope & status

Every jaxfne output is labeled **Relative** or **Absolute**. Relative values are
the default and require no external evidence; Absolute (physically calibrated)
values require an explicit, evidenced calibration step. Reference:
[Scope & status](docs/scope_and_status.md).

Exported but not yet implemented: `GLIFEmitter`, `LIFEmitter`, `write_nwb`, `read_nwb`.

## Documentation

| Resource | Link |
|----------|------|
| Quickstart (three build paths, canonical column, Jaxley) | [docs/quickstart.md](docs/quickstart.md) |
| Full docs site | [jaxfne.readthedocs.io](https://jaxfne.readthedocs.io/) |
| Tutorials & études | [docs/tutorials/](docs/tutorials/) |
| Changelog | [docs/changelog.md](docs/changelog.md) |
| Contributing | [docs/contributing.md](docs/contributing.md) |
| AI agents | [docs/for_ai_agents.md](docs/for_ai_agents.md) |

Documentation for AI coding agents ([skills/](skills/), [docs/for_ai_agents.md](docs/for_ai_agents.md))
is a deliberate design choice, not incidental repo clutter — it's verified against the
same source of truth as the human-facing docs above, not a separate, drifting spec.

## Citation

Machine-readable metadata: [`CITATION.cff`](CITATION.cff) (GitHub **Cite this repository**).
BibTeX and Zenodo DOI setup: [docs/citation.md](docs/citation.md).
