Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions doc/authors.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,40 @@ Current core team

* `Alessio Paolo Buccino <https://github.com/alejoe91>`_ [1]
* `Samuel Garcia <https://github.com/samuelgarcia>`_ [2]
* `Chris Halcrow <https://github.com/chrishalcrow>`_ [3]

For any inquiries, please contact Alessio Buccino (alessiop.buccino@gmail.com) or Samuel Garcia
(samuel.garcie.die@gmail.com), or just write an issue (preferred)!
For any inquiries, please contact Alessio Buccino (alessiop.buccino@gmail.com), Samuel Garcia
(samuel.garcie.die@gmail.com) or Chris Halcrow (chalcrow@ed.ac.uk), or just write an issue (preferred)!

Core maintainers
----------------

The following people have made significant ongoing contributions towards SpikeInterface:

* `Zach McKenzie <https://github.com/zm711>`_ [4]
* `Heberto Mayorquin <https://github.com/h-mayorquin>`_ [5]
* `Pierre Yger <https://github.com/yger>`_ [6]
* `Joe Ziminski <https://github.com/JoeZiminski>`_ [7]

Founding core team
------------------

* `Alessio Paolo Buccino <https://github.com/alejoe91>`_ [1]
* `Cole Hurwitz <https://github.com/colehurwitz>`_ [3]
* `Jeremy Magland <https://github.com/magland>`_ [4]
* `Matthias Hennig <https://github.com/mhhennig>`_ [3]
* `Cole Hurwitz <https://github.com/colehurwitz>`_ [8]
* `Jeremy Magland <https://github.com/magland>`_ [9]
* `Matthias Hennig <https://github.com/mhhennig>`_ [8]
* `Samuel Garcia <https://github.com/samuelgarcia>`_ [2]


1. Allen Institute for Neural Dynamics (AIND), Seattle, USA.
2. Centre de Recherche en Neuroscience de Lyon (CRNL), Lyon, France.
3. The Institute for Adaptive and Neural Computation (ANC), University of Edinburgh, Edinburgh, Scotland.
4. Center for Computational Biology (CCB), Flatiron Institute, New York, United States.

3. Centre for Discovery Brain Sciences, University of Edinburgh, Edinburgh, UK.
4. Harvard Medical School, Harvard University, USA.
5. CatalystNeuro, Wyoming, USA.
6. Lille Neurosciences and Cognition, Université de Lille, Lille, France.
7. Sainsbury Wellcome Centre, London, UK.
8. The Institute for Adaptive and Neural Computation (ANC), University of Edinburgh, Edinburgh, UK.
9. Center for Computational Biology (CCB), Flatiron Institute, New York, USA.

Contributors to current API (>0.90)
-----------------------------------
Expand Down
233 changes: 233 additions & 0 deletions doc/releases/0.104.0.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
.. _release0.104.0:

SpikeInterface 0.104.0 release notes
------------------------------------

Mar 23rd 2026

Main changes:

* Added support for ``Bombcell`` [Fabre]_, for unit curation, including new and updated template metrics (#4306)
* Added ``LUPIN`` [Garcia2024]_ as an internal sorter (#4192)
* Added support for ``SLAy`` [Koukuntla]_, for automated unit merges (#4190)
* Added ``valid_unit_periods`` postprocessing extension, based on NeuroPyxles [npyx]_ (#4299, #4302)
* Added ``AutoCorrelograms`` postprocessing extension (#4307)
* Added support for double-sided probes (#4272)
* Added ``SequentialCuration``, allowing for chains of curations to be applied to analyzers (#4298)
* Added support for FigPack, to eventually superseed SortingView (#4364)
* Major refactor and debugging of the ``Metrics`` postprocessing module (#4183, #4362, #4355, #4353, #4342, #4292) (see: :doc:`/modules/metrics`)
* Significant speedups in ``Metrics`` (#4308, #4363) and ``SortingComponents`` (#4402, #4341) modules, and in correlograms (#4305) and template similarity (#4343) computations.

* API and breaking changes:

* Specific metrics functions now imported from different sub module (see: :doc:`/modules/metrics/`)
* ``snr`` quality metric calculation now uses median rather than mean (see: :doc:`/modules/metrics/quality_metrics`)
* Metric name "peak_to_valley" has been renamed to "peak_to_trough_duration" for clarity. This name change will be applied automatically on load of older analzyers. (see: :doc:`/modules/metrics/template_metrics`)
* The function to do UnitRefine curation has been renamed from ``auto_label_units`` to ``unitrefine_label_units`` (see :py:func:`~spikeinterface.curation.unitrefine_label_units`)
* Remove support for Python 3.9

core:

* Fix closest_channels sparsity estimation when n_units > n_channels (#4443)
* Copy the recording from original sorting during NumpySorting.from_sorting() (#4417)
* Don't raise when extension is unknown (#4406)
* Make NumpySorting.from_unit_dict docs and code consistent (#4382)
* Improve extension dependency management in SortingAnalyzer (#4321)
* Implement `select_sorting_periods` in core (#4316)
* Implement the cached_lexsorted_spike_vector. (#4315)
* Move structured dtypes to base (#4314)
* Implement `select_sorting_periods` in metrics (#4302)
* Fix `get_probe` `set_probe` annotations propagation (#4300)
* using `spike_vector` on `core/check_sortings_equal` test (#4282)
* Random spike selection new methods (#4276)
* Implement the by_side grouping with probes (#4272)
* Fix gaussian filter with time vector (#4268)
* Delete some unused references to channel_slice (deprecated in v0.103.0) (#4246)
* Fix probable sharedmem (#4239)
* Implement Add/SubtractRecording classes and +- operators (#4238)
* Warn about non-mergeable units instead of raising an error (#4219)
* Implementing sparsity for ComputeTemplates (#4212)

extractors:

* Add XClustSortingExtractor (#4433)
* Add gain and offset for `read_kilosort_as_analyzer` (#4428)
* Fix openephys tests (#4426)
* Fix Open Ephys probe channel order (#4396)
* Improve NWB Extractor `__del__` method to avoid import errors (#4369)
* Fix IBL test with probe representation (#4335)
* Remove check of `len(inter_sample_shifts)` matching `num_readout_channels` (#4317)
* Update to SiNAPS extractor (#4263)
* Support for using event names as IDs in PL2 files (#4049)
* Get unit locations from HerdingspikesSortingExtractor (#3525)

preprocessing:

* Slice epsilons with dead channels to match gains during agc. (#4430)
* Support time_vector in resample() (#4429)
* Implementing KNN referencing and a backup referencing mechanism for common_reference (#4412)
* Use a truncated median filter near edges when detecting bad channels (#4391)
* Make anyone happy about warnings and margin in filtering. (#4384)
* Fix bug spatial filter #4175 (#4286)
* Fix gaussian filter with time vector (#4268)
* Fixes Issue4180 (#4247)
* Fix artifact removal padding logic (#4245)
* Auto-estimate margins based on freq_min/f0+Q for filters (#4227)
* Fix silence period and job_kwargs (#4071)
* Remove artefacts based of an envelope (#3715)

sorters:

* Add the option for clustering methods to return temporal shifts for peaks while clustering (#4401)
* Add plotting functions for drift and diagnostics to KS4 (#4387)
* lupin and tdc2 : improvements (#4349)
* Improve multithreading and multi processing : lock + nogil + mp_context (#4333)
* Fix typo in lupin/tdc2 (#4284)
* Make "simple" sorters params simpler. (#4281)
* Improvements for internal sorters (#4279)
* kilosort4 may fail due to the undesirable instantiation of `logger` (#4277)
* Flatten params for tridesclous2 sorter (#4254)
* Add isosplit in simple sorter (#4249)
* Final cleaning of mixtures for lupin/tdc/sc (#4244)
* Cosmetic logging messages for SC2 (#4242)
* A new sorter : Lupin sorter (#4192)

postprocessing:

* Set amplitude scalings equal zero for zero template units (#4455)
* Add gain and offset for `read_kilosort_as_analyzer` (#4428)
* Don't raise when extension is unknown (#4406)
* Fix valid period amplitudes (#4361)
* Patch lag similarities (#4345)
* Speed up template similarity computing using numba (#4343)
* Change ComputeSpikeLocations to use only peak_sign (#4330)
* Ensure compute unit locations respects order of unit ids (#4329)
* Auto correlograms (#4307)
* Option to turn on parallel computation for CCG in numba (#4305)
* Valid unit periods extension (#4299)
* Add `BaseSpikeVectorExtension` (#4189)

metrics:

* Set num_histogram_bins in amplitude_cutoff (back) to 100 (#4415)
* Fix metrics test for numba correlograms fast_mode (#4377)
* Remove multiprocessing from NearestNeigbhor metric (#4363)
* Add peak_sign to sd_ratio (#4362)
* Improve error message for deprecated metric names (#4358)
* Correct formula for mad (and std) in drift quality metrics (#4355)
* Compute missing spikes on the right tail of amplitude distributions (#4353)
* Improve stability of velocity fits in template metrics (#4342)
* Timing the computations of quality metrics and some optimizations (#4308)
* Bombcell integration and template metrics refactoring (#4306)
* Fix rp violations bug (#4292)
* Refactor metrics into its own module (#4183)

curation:

* Improve robustness of model classifier tests (#4447)
* Rename `CurationModel` to `Curation` (#4421)
* Change 'min'/'max' to 'greater'/'less' when defining thresholds for `threshold_metrics_label_units` (#4416)
* Send peak_sign to `get_template_extremum_channel_peak_shift` in remove_redundant_units (#4408)
* Use `sorting._recording` (if available) in `remove_excess_spikes` (#4407)
* Add `threshold_metrics` curation (#4365)
* Ensure default supported_versions is a tuple, as in type (#4348)
* Refactor API for `auto_label_units` (#4338)
* Bombcell integration and template metrics refactoring (#4306)
* Sequential curation (#4298)
* Fix failing tests due to scikit-learn versions (#4253)
* Warn about non-mergeable units instead of raising an error (#4219)
* Add SLAy auto-merge preset (#4190)

widgets:

* Enlarge channel textbox in plot_traces (#4400)
* Send a float (rather than 1-element array) to BoundedFloatText (#4399)
* Figpack integration (replacement of sortingview) (#4364)
* Remove layer selector from `plot_traces` ipywidgets backend if single layer (#4325)
* Fix edges of 2d-histogram in UnitWaveformDensityMapWidget (#4283)
* Protect unit summary and unit locations plots against NaNs (#4128)

generators:

* More possibilities for gt generation (#4289)
* Update generate.py (#4163)

sortingcomponents:

* Optimizations: faster waveforms/templates and seeding iterative_isosplit properly (#4402)
* Add the option for clustering methods to return temporal shifts for peaks while clustering (#4401)
* Make peak detection (locally_exclussive, matched_filtering) faster and more accurate. (#4341)
* Needed by Olivier to create an analyzer with precomputed data (#4303)
* Final cleaning of mixtures for lupin/tdc/sc (#4244)
* Cosmetic logging messages for SC2 (#4242)
* Update nearest peeler (#4223)

documentation:

* Add missing API doc entries for `save*`, `dump*`, `remove_channels`, and `scale_to_uV` (#4451)
* Extend unsigned to signed docs (#4448)
* Fix link to LFP docs in error message (#4424)
* Fix some typos in documentation (#4419)
* Add a why integrate your software with spikeinterface section (#4393)
* Add `compute_valid_unit_periods` to api and add credit in postprocessing module (#4390)
* Add metric_descriptions and BaseMetricExtension.get_metric_colum_descriptions (#4278)
* Doc sorters (#4275)
* Clean auto-release script: use metrics + only print changed modules (#4265)

continuous integration:

* Update setuptools version for legacy kilosort (#4386)
* Get rid of pytest-dependency and use fixtures (#4381)
* Free up space in codecov CI (#4252)

packaging:

* Update lower bound python support to 3.10 (#4383)

testing:

* Further Improve robustness of model classifier tests (#4450)
* Remove `n_jobs=-1` from curation tests (#4449)
* Improve robustness of model classifier tests (#4447)
* Fix openephys tests (#4426)
* Rename `neurodsp` to `ibldsp` to ensure IBL tests run (#4392)
* Update setuptools version for legacy kilosort (#4386)
* Get rid of pytest-dependency and use fixtures (#4381)
* Test IBL extractors tests failing for PI update (#4285)
* using `spike_vector` on `core/check_sortings_equal` test (#4282)
* fix tdc2 failing tests (#4271)
* Fix failing tests due to scikit-learn versions (#4253)

deprecations:

* Remove deprecations for 0.104.0 (#4425)
* Make anyone happy about warnings and margin in filtering. (#4384)
* Improve error message for deprecated metric names (#4358)
* Binary recording bacward-compatibility (#4357)

Contributors:

* @CodyCBakerPhD
* @JoeZiminski
* @Julie-Fabre
* @MGAMZ
* @OleBialas
* @ShijiMi-Soup
* @ablot
* @alejoe91
* @b-grimaud
* @chrishalcrow
* @ecobost
* @esutlie
* @grahamfindlay
* @h-mayorquin
* @m-beau
* @mhhennig
* @oliche
* @pas-calc
* @raffaele222
* @samuelgarcia
* @tayheau
* @ueeseer
* @yger
* @zzhmark
4 changes: 2 additions & 2 deletions doc/scripts/auto-release-notes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ START_DATE="$1"
END_DATE="$2"

if [ -z "$3" ] || [ "$3" = "all" ]; then
LABELS=("core" "extractors" "preprocessing" "sorters" "postprocessing" "metrics" "curation" "widgets" "generators" "hybrid" "sortingcomponents" "motion correction" "documentation" "continuous integration" "packaging" "testing" "deprecations")
LABELS=("core" "extractors" "preprocessing" "sorters" "postprocessing" "metrics" "curation" "widgets" "generators" "hybrid" "sortingcomponents" "motion correction" "documentation" "continuous integration" "packaging" "testing" "deprecations" "qualitymetrics")
else
LABELS=("$3")
fi
Expand Down Expand Up @@ -44,4 +44,4 @@ echo "Contributors:"
echo ""
gh pr list --repo SpikeInterface/spikeinterface --limit 1000 --base main --state merged --json number,title,author,mergedAt \
| jq -r --arg start_date "${START_DATE}T00:00:00Z" --arg end_date "${END_DATE}T00:00:00Z" \
'[.[] | select(.mergedAt >= $start_date and .mergedAt <= $end_date) | .author.login] | unique | .[] | "* @" + .'
'[.[] | select(.mergedAt >= $start_date and .mergedAt <= $end_date and .author.login != "app/pre-commit-ci") | .author.login] | unique | .[] | "* @" + .'
1 change: 1 addition & 0 deletions doc/whatisnew.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Release notes
.. toctree::
:maxdepth: 1

releases/0.104.0.rst
releases/0.103.2.rst
releases/0.103.1.rst
releases/0.103.0.rst
Expand Down
20 changes: 10 additions & 10 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "spikeinterface"
version = "0.103.3"
version = "0.104.0"
authors = [
{ name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
{ name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
Expand All @@ -26,7 +26,7 @@ dependencies = [
"tqdm",
"zarr>=2.18,<3",
"neo>=0.14.3",
"probeinterface>=0.3.1",
"probeinterface>=0.3.2",
"packaging",
"pydantic",
"numcodecs<0.16.0", # For supporting zarr < 3
Expand Down Expand Up @@ -127,8 +127,8 @@ test_core = [

# for github test : probeinterface and neo from master
# for release we need pypi, so this need to be commented
"probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
"neo @ git+https://github.com/NeuralEnsemble/python-neo.git",
# "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
# "neo @ git+https://github.com/NeuralEnsemble/python-neo.git",

# for slurm jobs,
"pytest-mock"
Expand All @@ -139,8 +139,8 @@ test_extractors = [
"pooch>=1.8.2",
"datalad>=1.0.2",
# Commenting out for release
"probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
"neo @ git+https://github.com/NeuralEnsemble/python-neo.git",
# "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
# "neo @ git+https://github.com/NeuralEnsemble/python-neo.git",
]

test_preprocessing = [
Expand Down Expand Up @@ -190,8 +190,8 @@ test = [

# for github test : probeinterface and neo from master
# for release we need pypi, so this need to be commented
"probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
"neo @ git+https://github.com/NeuralEnsemble/python-neo.git",
# "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
# "neo @ git+https://github.com/NeuralEnsemble/python-neo.git",

# for slurm jobs
"pytest-mock",
Expand Down Expand Up @@ -219,8 +219,8 @@ docs = [
"huggingface_hub", # For automated curation

# for release we need pypi, so this needs to be commented
"probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git", # We always build from the latest version
"neo @ git+https://github.com/NeuralEnsemble/python-neo.git", # We always build from the latest version
# "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git", # We always build from the latest version
# "neo @ git+https://github.com/NeuralEnsemble/python-neo.git", # We always build from the latest version
]

dev = [
Expand Down
4 changes: 2 additions & 2 deletions src/spikeinterface/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@
# This flag must be set to False for release
# This avoids using versioning that contains ".dev0" (and this is a better choice)
# This is mainly useful when using run_sorter in a container and spikeinterface install
DEV_MODE = True
# DEV_MODE = False
# DEV_MODE = True
DEV_MODE = False
Loading