Metadata-Version: 2.4
Name: neurarc
Version: 0.1.0
Summary: Python reader/writer for the ARC binary connectome format
License-Expression: MIT
Requires-Python: >=3.10
Requires-Dist: numpy>=1.24
Provides-Extra: all
Requires-Dist: h5py>=3.8; extra == 'all'
Requires-Dist: networkx>=3; extra == 'all'
Requires-Dist: scipy>=1.10; extra == 'all'
Provides-Extra: dev
Requires-Dist: h5py>=3.8; extra == 'dev'
Requires-Dist: networkx>=3; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: scipy>=1.10; extra == 'dev'
Provides-Extra: networkx
Requires-Dist: networkx>=3; extra == 'networkx'
Provides-Extra: scipy
Requires-Dist: scipy>=1.10; extra == 'scipy'
Provides-Extra: sonata
Requires-Dist: h5py>=3.8; extra == 'sonata'
Description-Content-Type: text/markdown

# neurarc-py

Python reader/writer for the [ARC](https://github.com/sectersion/neurarc) binary connectome format.

## Install

```bash
pip install neurarc

# with optional extras
pip install neurarc[scipy]      # scipy sparse matrix export
pip install neurarc[networkx]   # networkx graph export
pip install neurarc[sonata]     # SONATA HDF5 import
pip install neurarc[all]        # everything
```

## Quick Start

```python
from neurarc import load, save, from_csv, from_json, validate

# import from CSV
arc = from_csv("edges.csv")
save("network.arc", arc)

# import from JSON
arc = from_json("edges.json")
save("network.arc", arc)

# load and validate
arc = load("network.arc")
errors = validate(arc)
```

## CLI

```bash
# import from CSV/JSON/SONATA
neurarc import edges.csv -o network.arc
neurarc import edges.json -o network.arc
neurarc import nodes.h5 -o network.arc -f sonata --edges-file edges.h5

# export to CSV
neurarc export network.arc -o edges.csv -f csv

# inspect
neurarc info network.arc
neurarc validate network.arc
neurarc dump-header network.arc
neurarc dump-tensors network.arc --values

# convert between formats
neurarc convert network.arc -f csr -o network_csr.arc
```

## Python API

```python
import neurarc as arc

# import
arc_obj = arc.from_csv("edges.csv", neuron_count=1000)
arc_obj = arc.from_json("edges.json")
arc_obj = arc.from_sonata("nodes.h5", "edges.h5")

# save/load
arc.save("network.arc", arc_obj)
arc_obj = arc.load("network.arc")

# convert
csr = arc.to_csr(arc_obj)
back = arc.to_edge_list(csr)

# export
arc.to_csv("output.csv", arc_obj)
scipy_mat = arc.to_scipy_csr(arc_obj)
nx_graph = arc.to_networkx(arc_obj)
```

## Development

```bash
pip install -e ".[dev]"
pytest
```
