Metadata-Version: 2.2
Name: navis
Version: 1.10.0
Summary: Neuron Analysis and Visualization library
Home-page: https://navis-org.github.io/navis/
Author: Philipp Schlegel
Author-email: pms70@cam.ac.uk
License: GNU GPL V3
Project-URL: Documentation, https://navis-org.github.io/navis/
Project-URL: Source, https://github.com/navis-org/navis
Project-URL: Changelog, https://navis-org.github.io/navis/changelog/
Keywords: Neuron Analysis Visualization Morphometrics Morphology Anatomy Connectivity Transform Neuroscience NBLAST Skeletons SWC neuPrint
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.9,<4.0
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: h5py>=3.1
Requires-Dist: matplotlib>=3.9
Requires-Dist: morphops>=0.1.11
Requires-Dist: ncollpyde>=0.18
Requires-Dist: networkx>=2.4
Requires-Dist: numpy>=1.16
Requires-Dist: pandas>=1.0
Requires-Dist: pint>=0.10
Requires-Dist: pynrrd>=0.4.2
Requires-Dist: pypng>=0.0.18
Requires-Dist: requests>=2.20
Requires-Dist: seaborn>=0.10
Requires-Dist: setuptools>=65.5.1
Requires-Dist: scipy>=1.5
Requires-Dist: six>=1.11
Requires-Dist: tqdm>=4.45
Requires-Dist: typing-extensions>=3.7.4
Requires-Dist: trimesh>=3.8
Requires-Dist: fuzzywuzzy>=0.18
Requires-Dist: molesq>=0.2.0
Requires-Dist: rdata>=0.5
Requires-Dist: igraph!=0.10.0,!=0.10.1
Requires-Dist: skeletor>=1.0.0
Requires-Dist: pykdtree<=1.3.12; platform_system == "Darwin"
Requires-Dist: pykdtree; platform_system != "Darwin"
Provides-Extra: pathos
Requires-Dist: pathos>=0.2.7; extra == "pathos"
Provides-Extra: shapely
Requires-Dist: Shapely>=1.6.0; extra == "shapely"
Provides-Extra: r
Requires-Dist: rpy2; extra == "r"
Provides-Extra: hash
Requires-Dist: xxhash; extra == "hash"
Provides-Extra: flybrains
Requires-Dist: flybrains; extra == "flybrains"
Provides-Extra: cloudvolume
Requires-Dist: cloud-volume>=5.2.0; extra == "cloudvolume"
Provides-Extra: fastcore
Requires-Dist: navis-fastcore>=0.0.8; extra == "fastcore"
Provides-Extra: plotly
Requires-Dist: plotly>=4.9; extra == "plotly"
Provides-Extra: k3d
Requires-Dist: k3d; extra == "k3d"
Provides-Extra: vispy-default
Requires-Dist: vispy[pyside6]>=0.6.4; extra == "vispy-default"
Requires-Dist: jupyter_rfb>=0.4.1; extra == "vispy-default"
Provides-Extra: octarine-default
Requires-Dist: octarine3d[all]>=0.2.3; extra == "octarine-default"
Requires-Dist: octarine-navis-plugin>=0.1.2; extra == "octarine-default"
Provides-Extra: meshes
Requires-Dist: open3d; python_version < "3.12" and extra == "meshes"
Requires-Dist: pyfqmr; extra == "meshes"
Provides-Extra: test-notebook
Requires-Dist: jupyter; extra == "test-notebook"
Requires-Dist: neuprint-python; extra == "test-notebook"
Requires-Dist: caveclient; extra == "test-notebook"
Requires-Dist: cloud-volume; extra == "test-notebook"
Requires-Dist: flybrains; extra == "test-notebook"
Requires-Dist: scikit-image; extra == "test-notebook"
Requires-Dist: Shapely>=1.6.0; extra == "test-notebook"
Provides-Extra: dev
Requires-Dist: flake8; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-env; extra == "dev"
Requires-Dist: pytest-xvfb; extra == "dev"
Requires-Dist: pytest-timeout; extra == "dev"
Requires-Dist: gitpython; extra == "dev"
Requires-Dist: scikit-image; extra == "dev"
Provides-Extra: docs
Requires-Dist: mkdocs; extra == "docs"
Requires-Dist: mkdocs-material[imaging]; extra == "docs"
Requires-Dist: mkdocs-gen-files; extra == "docs"
Requires-Dist: mkdocstrings[python]; extra == "docs"
Requires-Dist: mkdocs-glightbox; extra == "docs"
Requires-Dist: mkdocs-gallery; extra == "docs"
Requires-Dist: markdown-exec; extra == "docs"
Requires-Dist: mkdocs-section-index; extra == "docs"
Requires-Dist: mkdocs-literate-nav; extra == "docs"
Requires-Dist: mkdocs-minify-plugin; extra == "docs"
Requires-Dist: mkdocs-autorefs; extra == "docs"
Requires-Dist: mkdocs-macros-plugin; extra == "docs"
Provides-Extra: all
Requires-Dist: pathos>=0.2.7; extra == "all"
Requires-Dist: Shapely>=1.6.0; extra == "all"
Requires-Dist: xxhash; extra == "all"
Requires-Dist: cloud-volume>=5.2.0; extra == "all"
Requires-Dist: navis-fastcore>=0.0.8; extra == "all"
Requires-Dist: plotly>=4.9; extra == "all"
Requires-Dist: k3d; extra == "all"
Requires-Dist: vispy[pyside6]>=0.6.4; extra == "all"
Requires-Dist: jupyter_rfb>=0.4.1; extra == "all"
Requires-Dist: octarine3d[all]>=0.2.3; extra == "all"
Requires-Dist: octarine-navis-plugin>=0.1.2; extra == "all"
Requires-Dist: open3d; python_version < "3.12" and extra == "all"
Requires-Dist: pyfqmr; extra == "all"
Provides-Extra: all-dev
Requires-Dist: pathos>=0.2.7; extra == "all-dev"
Requires-Dist: Shapely>=1.6.0; extra == "all-dev"
Requires-Dist: xxhash; extra == "all-dev"
Requires-Dist: cloud-volume>=5.2.0; extra == "all-dev"
Requires-Dist: navis-fastcore>=0.0.8; extra == "all-dev"
Requires-Dist: plotly>=4.9; extra == "all-dev"
Requires-Dist: k3d; extra == "all-dev"
Requires-Dist: vispy[pyside6]>=0.6.4; extra == "all-dev"
Requires-Dist: jupyter_rfb>=0.4.1; extra == "all-dev"
Requires-Dist: octarine3d[all]>=0.2.3; extra == "all-dev"
Requires-Dist: octarine-navis-plugin>=0.1.2; extra == "all-dev"
Requires-Dist: open3d; python_version < "3.12" and extra == "all-dev"
Requires-Dist: pyfqmr; extra == "all-dev"
Requires-Dist: jupyter; extra == "all-dev"
Requires-Dist: neuprint-python; extra == "all-dev"
Requires-Dist: caveclient; extra == "all-dev"
Requires-Dist: cloud-volume; extra == "all-dev"
Requires-Dist: flybrains; extra == "all-dev"
Requires-Dist: scikit-image; extra == "all-dev"
Requires-Dist: Shapely>=1.6.0; extra == "all-dev"
Requires-Dist: flake8; extra == "all-dev"
Requires-Dist: wheel; extra == "all-dev"
Requires-Dist: mypy; extra == "all-dev"
Requires-Dist: pytest; extra == "all-dev"
Requires-Dist: pytest-env; extra == "all-dev"
Requires-Dist: pytest-xvfb; extra == "all-dev"
Requires-Dist: pytest-timeout; extra == "all-dev"
Requires-Dist: gitpython; extra == "all-dev"
Requires-Dist: scikit-image; extra == "all-dev"
Requires-Dist: mkdocs; extra == "all-dev"
Requires-Dist: mkdocs-material[imaging]; extra == "all-dev"
Requires-Dist: mkdocs-gen-files; extra == "all-dev"
Requires-Dist: mkdocstrings[python]; extra == "all-dev"
Requires-Dist: mkdocs-glightbox; extra == "all-dev"
Requires-Dist: mkdocs-gallery; extra == "all-dev"
Requires-Dist: markdown-exec; extra == "all-dev"
Requires-Dist: mkdocs-section-index; extra == "all-dev"
Requires-Dist: mkdocs-literate-nav; extra == "all-dev"
Requires-Dist: mkdocs-minify-plugin; extra == "all-dev"
Requires-Dist: mkdocs-autorefs; extra == "all-dev"
Requires-Dist: mkdocs-macros-plugin; extra == "all-dev"
Provides-Extra: vispy-pyglet
Requires-Dist: vispy[pyglet]>=0.6.4; extra == "vispy-pyglet"
Provides-Extra: vispy-pyqt5
Requires-Dist: vispy[pyqt5]>=0.6.4; extra == "vispy-pyqt5"
Provides-Extra: vispy-pyqt6
Requires-Dist: vispy[pyqt6]>=0.6.4; extra == "vispy-pyqt6"
Provides-Extra: vispy-pyside
Requires-Dist: vispy[pyside]>=0.6.4; extra == "vispy-pyside"
Provides-Extra: vispy-pyside2
Requires-Dist: vispy[pyside2]>=0.6.4; extra == "vispy-pyside2"
Provides-Extra: vispy-pyside6
Requires-Dist: vispy[pyside6]>=0.6.4; extra == "vispy-pyside6"
Provides-Extra: vispy-glfw
Requires-Dist: vispy[glfw]>=0.6.4; extra == "vispy-glfw"
Provides-Extra: vispy-sdl2
Requires-Dist: vispy[sdl2]>=0.6.4; extra == "vispy-sdl2"
Provides-Extra: vispy-wx
Requires-Dist: vispy[wx]>=0.6.4; extra == "vispy-wx"
Provides-Extra: vispy-tk
Requires-Dist: vispy[tk]>=0.6.4; extra == "vispy-tk"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

[![Docs](https://github.com/navis-org/navis/actions/workflows/build-docs.yml/badge.svg)](https://github.com/navis-org/navis/actions/workflows/build-docs.yml) [![Tests](https://github.com/navis-org/navis/actions/workflows/test-package.yml/badge.svg)](https://github.com/navis-org/navis/actions/workflows/test-package.yml) [![Test tutorials](https://github.com/navis-org/navis/actions/workflows/test-tutorials.yml/badge.svg)](https://github.com/navis-org/navis/actions/workflows/test-tutorials.yml) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/navis-org/navis/blob/master/examples/colab.ipynb) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8191725.svg)](https://zenodo.org/doi/10.5281/zenodo.4699382) [![Downloads](https://pepy.tech/badge/navis)](https://pepy.tech/project/navis)

<img src="https://github.com/navis-org/navis/raw/master/docs/_static/logo_new.png" height="150">

NAVis is a Python 3 library for **N**euron **A**nalysis and **Vis**ualization.

## Documentation
Visit our documentation [here](https://navis-org.github.io/navis/ "NAVis Documentation")!

## Features
* **polyglot**: work with and convert between neuron skeletons, meshes, dotprops and images
* **visualize**: 2D (matplotlib) and 3D (octarine, vispy, plotly or k3d) plots
* **process**: skeletonization, meshing, smoothing, repair, downsampling, etc.
* **morphometrics**: Strahler analysis, cable length, volume, tortuosity and more
* **similarity**: compare & cluster by morphology (e.g. NBLAST, persistence or form factor) or connectivity metrics
* **transform**: move data between template brains (built-in support for HDF5, CMTK, Elastix and landmark-based transforms)
* **interface**: load neurons directly from [neuPrint](https://neuprint.janelia.org), [neuromorpho.org](http://neuromorpho.org) and other remote data repositories
* **model** neurons and networks using the *NEURON* simulator
* **render**: use Blender 3D for high quality [visualizations](https://youtu.be/wl3sFG7WQJc)
* **R** neuron libraries: interfaces with [nat](https://github.com/jefferis/nat), [rcatmaid](https://github.com/jefferis/rcatmaid), [elmr](https://github.com/jefferis/elmr) and more
* **import-export**: read/write SWCs, neuroglancer's ["*precomputed*"](https://github.com/google/neuroglancer/tree/master/src/datasource/precomputed) format, NMX/NML, NRRD, mesh-files and more
* **fast**: uses functions compiled in Rust under-the-hood (see [fastcore](https://github.com/schlegelp/fastcore-rs))
* **scalable**: out-of-the-box support for multiprocessing
* **extensible**: build your own package on top of navis - see [pymaid](https://pymaid.readthedocs.io/en/latest/) for example

## Getting started
See the [documentation](http://navis.readthedocs.io/ "NAVis ReadTheDocs") for detailed installation instructions, tutorials and examples. For the impatient:

```sh
pip3 install "navis[all]"
```

which includes all optional extras providing features and/or performance improvements. If you encounter issues, you may want
to try a minimal installation and install optional dependencies as needed. Please see the
[Install Instructions](https://navis-org.github.io/navis/installation/) for a detailed explanation.

![movie](https://user-images.githubusercontent.com/7161148/114312307-28a72700-9aea-11eb-89a6-ee1d72bfa730.mov)

## Questions?
Questions on how to use `navis` are best placed in [discussions](https://github.com/navis-org/navis/discussions). Same goes for cool projects or analyses you made using `navis` -
we'd love to hear from you!

## Changelog

A summary of changes can be found
[here](https://navis.readthedocs.io/en/latest/source/whats_new.html).

## NAVis & friends
<p align="center">
<img src="https://github.com/navis-org/navis/blob/master/docs/_static/navis_ecosystem.png?raw=true" width="700">
</p>

NAVis comes with batteries included but is also highly extensible. Some
libraries built on top of NAVis:
* [flybrains](https://github.com/navis-org/navis-flybrains) provides templates and transforms for *Drosophila* brains to use with navis
* [pymaid](https://pymaid.readthedocs.io/en/latest/) pulls and pushes data from/to CATMAID servers
* [fafbseg](https://fafbseg-py.readthedocs.io/en/latest/index.html) contains tools to work with auto-segmented data for the FAFB EM dataset including FlyWire

## Who uses NAVis?
NAVis has been used in a range of neurobiological publications. See [here](publications.md) for a list.

We have implemented various published algorithms and methods:

1. NBLAST: Comparison of neurons based on morphology [(Costa et al., 2016)](https://www.cell.com/neuron/fulltext/S0896-6273(16)30265-3?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS0896627316302653%3Fshowall%3Dtrue)
2. Vertex Similarity: Comparison of neurons based on connectivity [(Jarrell et al., 2012)](http://science.sciencemag.org/content/337/6093/437.long)
3. Comparison of neurons based on synapse distribution
[(Schlegel et al., 2016)](https://elifesciences.org/content/5/e16799)
4. Synapse flow centrality for axon-dendrite splits [(Schneider-Mizell et al., 2016)](https://elifesciences.org/articles/12059)

Working on your own cool new method? Consider adding it to NAVis!

## Citing NAVis
We'd love to know if you found NAVis useful for your research! You can help us
spread the word by citing the DOI provided by Zenodo [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8191725.svg)](https://zenodo.org/doi/10.5281/zenodo.4699382)

## License
This code is under [GNU GPL V3](LICENSE).

## Acknowledgments
NAVis is inspired by and inherits much of its design from the excellent
[natverse](http://natverse.org) R packages by
[Greg Jefferis](https://github.com/jefferis), [Alex Bates](https://github.com/alexanderbates),
[James Manton](https://github.com/ajdm) and others.

## Contributing
Want to contribute? Great, here is how!

#### Report bugs or request features
Open an [issue](https://github.com/navis-org/navis/issues). For bug reports
please make sure to include some code/data with a minimum example for us to
reproduce the bug.

#### Contribute code
We're always happy for people to contribute code - be it a small bug fix, a
new feature or improved documentation.

Here's how you'd do it in a nutshell:

1. Fork this repository
2. `git clone` it to your local machine
3. Install the full development dependencies with `pip install -r requirements.txt`
4. Install the package in editable mode with `pip install -e ".[all]"`
5. Create, `git add`, `git commit`, `git push`, and pull request your changes.

Run the tests locally with `pytest -v`.

Docstrings should use the [numpydoc](https://numpydoc.readthedocs.io/en/latest/format.html) format,
and make sure you include any relevant links and citations.
Unit tests should be [doctests](https://docs.python.org/3/library/doctest.html)
and/or use [pytest](https://docs.pytest.org/en/stable/) in the `./tests` directory.

Doctests have access to the `tmp_dir: pathlib.Path` variable,
which should be used if any files need to be written.

Feel free to get in touch either through an [issue](https://github.com/navis-org/navis/issues)
or [discussion](https://github.com/navis-org/navis/discussions) if you need
pointers or input on how to implement an idea.
