Metadata-Version: 2.4
Name: spikeinterface
Version: 0.104.3
Summary: Python toolkit for analysis, visualization, and comparison of spike sorting output
Author-email: Alessio Buccino <alessiop.buccino@gmail.com>, Samuel Garcia <sam.garcia.die@gmail.com>
Project-URL: homepage, https://github.com/SpikeInterface/spikeinterface
Project-URL: repository, https://github.com/SpikeInterface/spikeinterface
Project-URL: documentation, https://spikeinterface.readthedocs.io/
Project-URL: changelog, https://spikeinterface.readthedocs.io/en/latest/whatisnew.html
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: License :: OSI Approved :: MIT License
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: MacOS
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.20; python_version < "3.13"
Requires-Dist: numpy>=2.0.0; python_version >= "3.13"
Requires-Dist: threadpoolctl>=3.0.0
Requires-Dist: tqdm
Requires-Dist: zarr<3,>=2.18
Requires-Dist: neo>=0.14.4
Requires-Dist: probeinterface>=0.3.2
Requires-Dist: packaging
Requires-Dist: pydantic
Requires-Dist: numcodecs<0.16.0
Provides-Extra: extractors
Requires-Dist: MEArec>=1.8; extra == "extractors"
Requires-Dist: pynwb>=2.6.0; extra == "extractors"
Requires-Dist: hdmf-zarr>=0.11.0; extra == "extractors"
Requires-Dist: pyedflib>=0.1.30; extra == "extractors"
Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
Requires-Dist: lxml; extra == "extractors"
Requires-Dist: scipy; extra == "extractors"
Requires-Dist: ibllib>=3.4.1; python_version >= "3.10" and extra == "extractors"
Requires-Dist: pymatreader>=0.0.32; extra == "extractors"
Requires-Dist: zugbruecke>=0.2; sys_platform != "win32" and extra == "extractors"
Provides-Extra: streaming-extractors
Requires-Dist: ibllib>=3.4.1; python_version >= "3.10" and extra == "streaming-extractors"
Requires-Dist: pynwb>=2.6.0; extra == "streaming-extractors"
Requires-Dist: fsspec; extra == "streaming-extractors"
Requires-Dist: aiohttp; extra == "streaming-extractors"
Requires-Dist: requests; extra == "streaming-extractors"
Requires-Dist: hdmf-zarr>=0.11.0; extra == "streaming-extractors"
Requires-Dist: remfile; extra == "streaming-extractors"
Requires-Dist: s3fs; extra == "streaming-extractors"
Provides-Extra: preprocessing
Requires-Dist: scipy; extra == "preprocessing"
Provides-Extra: full
Requires-Dist: h5py; extra == "full"
Requires-Dist: pandas<3; extra == "full"
Requires-Dist: scipy; extra == "full"
Requires-Dist: scikit-learn<1.8; extra == "full"
Requires-Dist: networkx; extra == "full"
Requires-Dist: distinctipy; extra == "full"
Requires-Dist: matplotlib>=3.6; extra == "full"
Requires-Dist: cuda-python>=11.8.6; platform_system != "Darwin" and extra == "full"
Requires-Dist: numba>=0.59; extra == "full"
Requires-Dist: skops; extra == "full"
Requires-Dist: huggingface_hub; extra == "full"
Provides-Extra: widgets
Requires-Dist: matplotlib; extra == "widgets"
Requires-Dist: ipympl; extra == "widgets"
Requires-Dist: ipywidgets; extra == "widgets"
Requires-Dist: figpack; extra == "widgets"
Requires-Dist: figpack-spike-sorting; extra == "widgets"
Provides-Extra: metrics
Requires-Dist: scikit-learn<1.8; extra == "metrics"
Requires-Dist: scipy; extra == "metrics"
Requires-Dist: pandas<3; extra == "metrics"
Requires-Dist: numba; extra == "metrics"
Provides-Extra: test-core
Requires-Dist: pytest<8.4.0; extra == "test-core"
Requires-Dist: psutil; extra == "test-core"
Requires-Dist: pytest-mock; extra == "test-core"
Provides-Extra: test-extractors
Requires-Dist: pooch>=1.8.2; extra == "test-extractors"
Requires-Dist: datalad>=1.0.2; extra == "test-extractors"
Provides-Extra: test-preprocessing
Requires-Dist: ibllib>=3.4.1; python_version >= "3.10" and extra == "test-preprocessing"
Requires-Dist: torch; extra == "test-preprocessing"
Requires-Dist: pooch; extra == "test-preprocessing"
Requires-Dist: datalad; extra == "test-preprocessing"
Provides-Extra: test
Requires-Dist: pytest<8.4.0; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: psutil; extra == "test"
Requires-Dist: ibllib>=3.4.1; python_version >= "3.10" and extra == "test"
Requires-Dist: s3fs; extra == "test"
Requires-Dist: pynapple; extra == "test"
Requires-Dist: numba<0.61.0; python_version < "3.13" and extra == "test"
Requires-Dist: numba>=0.61.0; python_version >= "3.13" and extra == "test"
Requires-Dist: hdbscan>=0.8.33; extra == "test"
Requires-Dist: sortingview>=0.12.0; extra == "test"
Requires-Dist: torch; extra == "test"
Requires-Dist: skops; extra == "test"
Requires-Dist: huggingface_hub; extra == "test"
Requires-Dist: sortingview; extra == "test"
Requires-Dist: pytest-mock; extra == "test"
Provides-Extra: docs
Requires-Dist: Sphinx; extra == "docs"
Requires-Dist: ipython; extra == "docs"
Requires-Dist: sphinx_rtd_theme>=1.2; extra == "docs"
Requires-Dist: sphinx-gallery; extra == "docs"
Requires-Dist: sphinx-design; extra == "docs"
Requires-Dist: numpydoc; extra == "docs"
Requires-Dist: sphinxcontrib-jquery; extra == "docs"
Requires-Dist: autodoc_pydantic; extra == "docs"
Requires-Dist: MEArec; extra == "docs"
Requires-Dist: pandas<3; extra == "docs"
Requires-Dist: hdbscan>=0.8.33; extra == "docs"
Requires-Dist: numba; extra == "docs"
Requires-Dist: networkx; extra == "docs"
Requires-Dist: seaborn; extra == "docs"
Requires-Dist: skops; extra == "docs"
Requires-Dist: scikit-learn<1.8; extra == "docs"
Requires-Dist: huggingface_hub; extra == "docs"
Provides-Extra: dev
Requires-Dist: spikeinterface[test]; extra == "dev"
Requires-Dist: spikeinterface[test_core]; extra == "dev"
Requires-Dist: spikeinterface[docs]; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Dynamic: license-file

# SpikeInterface: a unified framework for spike sorting

<table>
<tr>
  <td>Latest Release</td>
  <td>
    <a href="https://pypi.org/project/spikeinterface/">
    <img src="https://img.shields.io/pypi/v/spikeinterface.svg" alt="latest release" />
    </a>
  </td>
</tr>
<tr>
  <td>Documentation</td>
  <td>
    <a href="https://spikeinterface.readthedocs.io/">
    <img src="https://readthedocs.org/projects/spikeinterface/badge/?version=latest" alt="latest documentation" />
    </a>
  </td>
</tr>
<tr>
  <td>License</td>
  <td>
    <a href="https://github.com/SpikeInterface/spikeinterface/blob/master/LICENSE">
    <img src="https://img.shields.io/pypi/l/spikeinterface.svg" alt="license" />
    </a>
</td>
</tr>
<tr>
  <td>Build Status</td>
  <td>
    <a href="https://github.com/SpikeInterface/spikeinterface/actions/workflows/full-test-with-codecov.yml/badge.svg">
    <img src="https://github.com/SpikeInterface/spikeinterface/actions/workflows/full-test-with-codecov.yml/badge.svg" alt="CI build status" />
    </a>
  </td>
</tr>
<tr>
	<td>Codecov</td>
	<td>
		<a href="https://codecov.io/github/spikeinterface/spikeinterface">
		<img src="https://codecov.io/gh/spikeinterface/spikeinterface/branch/main/graphs/badge.svg" alt="codecov" />
		</a>
	</td>
</tr>
</table>


[![Twitter](https://img.shields.io/badge/@spikeinterface-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white)](https://twitter.com/spikeinterface) [![Mastodon](https://img.shields.io/badge/-@spikeinterface-%232B90D9?style=for-the-badge&logo=mastodon&logoColor=white)](https://fosstodon.org/@spikeinterface)

Please [Star](https://github.com/SpikeInterface/spikeinterface/stargazers) the project to support us and [Watch](https://github.com/SpikeInterface/spikeinterface/subscription) to always stay up-to-date!

SpikeInterface is a Python package designed to unify preexisting spike sorting technologies into a single code base. If you use SpikeInterface, you are also using code and ideas from many other projects. Our codebase would be tiny without the amazing algorithms and formats that we interface with. See them all, and how to cite them, on our [references page](https://spikeinterface.readthedocs.io/en/latest/references.html). In the past year, we have added support for the following tools:

- Bombcell [Bombcell: automated curation and cell classification of spike-sorted electrophysiology data](https://doi.org/10.5281/zenodo.8172822>) ([docs](https://spikeinterface.readthedocs.io/en/latest/how_to/auto_label_units.html#bombcell))
- SLAy. [SLAy-ing oversplitting errors in high-density electrophysiology spike sorting](https://www.biorxiv.org/content/10.1101/2025.06.20.660590v2) ([docs](https://spikeinterface.readthedocs.io/en/latest/modules/curation.html#auto-merging-units))
- Lupin, Spykingcicus2 and Tridesclous2. [Opening the black box: a modular approach to spike sorting](https://www.biorxiv.org/content/10.64898/2026.01.23.701239v1) ([docs](https://spikeinterface.readthedocs.io/en/stable/modules/sorters.html#supported-spike-sorters))
- rtsort. [RT-Sort: An action potential propagation-based algorithm for real time spike detection and sorting with millisecond latencies](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0312438) ([docs](https://spikeinterface.readthedocs.io/en/stable/modules/sorters.html#supported-spike-sorters))
- MEDiCINe. [MEDiCINe: Motion Correction for Neural Electrophysiology Recordings](https://www.eneuro.org/content/12/3/ENEURO.0529-24.2025) ([docs](https://spikeinterface.readthedocs.io/en/latest/how_to/handle_drift.html))
- UnitRefine. [UnitRefine: A Community Toolbox for Automated Spike Sorting Curation](https://www.biorxiv.org/content/10.1101/2025.03.30.645770v2) ([docs](https://spikeinterface.readthedocs.io/en/latest/tutorials_custom_index.html#automated-curation-tutorials))

If you would like us to add another tool, or you would like to integrate your project with our package, please [open an issue](https://github.com/SpikeInterface/spikeinterface/issues).

With SpikeInterface, users can:

- read/write many extracellular file formats.
- pre-process extracellular recordings.
- run many popular, semi-automatic spike sorters (kilosort1-4, mountainsort4-5, spykingcircus,
  tridesclous, ironclust, herdingspikes, yass, waveclus)
- run sorters developed in house (lupin, spkykingcicus2, tridesclous2, simple) that compete with kilosort4
- run theses polar sorters without installation using containers (Docker/Singularity).
- post-process sorted datasets using th SortingAnalyzer
- compare and benchmark spike sorting outputs.
- compute quality metrics to validate and curate spike sorting outputs.
- visualize recordings and spike sorting outputs in several ways (matplotlib, sortingview, jupyter, ephyviewer)
- export a report and/or export to phy
- curate your sorting with several strategies (ml-based, metrics based, manual, ...)
- offer a powerful Qt-based or we-based viewer in a separate package [spikeinterface-gui](https://github.com/SpikeInterface/spikeinterface-gui) for manual curation that replace phy.
- have powerful sorting components to build your own sorter.
- have a full motion/drift correction framework


## Documentation

Detailed documentation of the latest PyPI release of SpikeInterface can be found [here](https://spikeinterface.readthedocs.io/en/stable).

Detailed documentation of the development version of SpikeInterface can be found [here](https://spikeinterface.readthedocs.io/en/latest).

Several tutorials to get started can be found in [spiketutorials](https://github.com/SpikeInterface/spiketutorials).

Checkout our YouTube channel for video tutorials: [SpikeInterface YouTube Channel](https://www.youtube.com/@Spikeinterface).

There are also some useful notebooks [on our blog](https://spikeinterface.github.io) that cover advanced benchmarking
and sorting components.

You can also have a look at the [spikeinterface-gui](https://github.com/SpikeInterface/spikeinterface-gui).


## How to install spikeinterface

You can install the latest version of `spikeinterface` version with pip (using quotes ensures `pip install` works in all terminals/shells):

```bash
pip install "spikeinterface[full]"
```

The `[full]` option installs all the extra dependencies for all the different sub-modules.

To install all interactive widget backends, you can use:

```bash
 pip install "spikeinterface[full,widgets]"
```


To get the latest updates, you can install `spikeinterface` from source:

```bash
git clone https://github.com/SpikeInterface/spikeinterface.git
cd spikeinterface
pip install -e .
cd ..
```


## Citation

If you find SpikeInterface useful in your research, please cite:

```bibtex
@article{buccino2020spikeinterface,
  title={SpikeInterface, a unified framework for spike sorting},
  author={Buccino, Alessio Paolo and Hurwitz, Cole Lincoln and Garcia, Samuel and Magland, Jeremy and Siegle, Joshua H and Hurwitz, Roger and Hennig, Matthias H},
  journal={Elife},
  volume={9},
  pages={e61834},
  year={2020},
  publisher={eLife Sciences Publications Limited}
}
```

Please also cite other relevant papers for the specific components you use.
For a full list of references, please check the [references](https://spikeinterface.readthedocs.io/en/latest/references.html) page.
