Skip to content

Commit 85dc023

Browse files
authored
Merge branch 'main' into add-BaseRasterWidget
2 parents a1c83f6 + 88d1c55 commit 85dc023

56 files changed

Lines changed: 2691 additions & 704 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/all-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
strategy:
2626
fail-fast: false
2727
matrix:
28-
python-version: ["3.9", "3.12"] # Lower and higher versions we support
28+
python-version: ["3.9", "3.13"] # Lower and higher versions we support
2929
os: [macos-latest, windows-latest, ubuntu-latest]
3030
steps:
3131
- uses: actions/checkout@v4

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ repos:
66
- id: end-of-file-fixer
77
- id: trailing-whitespace
88
- repo: https://github.com/psf/black
9-
rev: 24.10.0
9+
rev: 25.1.0
1010
hooks:
1111
- id: black
1212
files: ^src/

doc/modules/core.rst

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,13 @@ Since these core extensions are important for all other extensions it is importa
310310
and the time after (:code:`ms_after`) to ensure that you have a full waveform. Because waveforms occur on multiple channels with multiple
311311
samples this can be a big data structure.
312312
* :code:`templates` are calculated from the raw waveform data and are used for downstream analyses
313-
(e.g. :code:`spike_amplitudes` are calculated based on the templates). This raises the question: if the :code:`templates` are what are used,
314-
then why save the :code:`waveforms`? Well, there are two ways to obtain :code:`templates` data: 1) directly from the raw data (based on the
315-
:code:`random_spikes`) or 2) from the :code:`waveforms`. When getting :code:`templates` from the raw data we are limited to obtaining averages
316-
and standard deviations. If we calculate the templates from the waveforms, however, we can also calculate the templates as medians or percentiles
313+
(e.g. :code:`spike_amplitudes` are calculated based on the templates). This raises the question: if the :code:`templates` are all we need,
314+
then why compute and save the :code:`waveforms`? Well, there are two ways to obtain :code:`templates` data: 1) directly from the raw data (based on the
315+
:code:`random_spikes`) or 2) from the :code:`waveforms` extension. When getting :code:`templates` from the raw data we are limited to obtaining averages
316+
and standard deviations. If we calculate the templates from the waveforms, however, we can also calculate the template medians or percentiles
317317
in addition to the average or standard deviations of the :code:`waveforms`. So it is important to think about the type of downstream analyses that
318-
you may want to do in deciding whether to calculate :code:`templates` with :code:`random_spikes` or using :code:`waveforms`.
318+
you may want to do in deciding whether to calculate :code:`templates` with :code:`random_spikes` or using :code:`waveforms`. Note that if the :code:`waveforms`
319+
extension is available, :code:`templates` will be calculated from it (the :code:`ms_before` and :code:`ms_after` parameters are also inherited from the :code:`waveforms`).
319320
* :code:`noise_levels` compute noise-levels in a channel-wise fashion. This provides important information about the specific recording session
320321
and is important for some downstream quality analyses.
321322

doc/releases/0.102.0.rst

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
.. _release0.102.0:
2+
3+
SpikeInterface 0.102.0 release notes
4+
------------------------------------
5+
6+
7th February 2025
7+
8+
Main changes:
9+
10+
* Added auto-label functions in curation module (#2918)
11+
* Refactored and improved auto-merge functions in curation module (#3435, #3601)
12+
* Added `spikeinterface.load()` function to load any SpikeInterface object (#3613, #3651)
13+
* Improved handling of time in base recording (#3509, #3623)
14+
* Multi-segment handling of motion interpolation (#3659)
15+
* Support for Numpy 2.0 and Zarr<3.0 (#3481,#3598)
16+
17+
18+
core:
19+
20+
* Extend si.load capabilities (#3651)
21+
* Use process as default in global job kwargs (#3648)
22+
* Fix node pipeline when multiple retrievers (#3642)
23+
* Add `get_start_time`/`get_end_time` functions and use them in `get_duration` (#3623)
24+
* Fix dataframe index dtype due to csv in quality metrics (#3622)
25+
* Replace `load_extractor` with `load_function` from `loading.py` (#3613)
26+
* Adding SharedMemoryTemplates (#3580)
27+
* Implement engine="thread" in ChunkRecordingExecutor (#3526)
28+
* Add `shift start time` function. (#3509)
29+
* recording_slices in run_node_pipeline() (#3506)
30+
* Template loading average or median (#3495)
31+
* Refactor matching with nodepiepeline (#3447)
32+
* Improve noise level machinery (#3359)
33+
* nodepipeline : skip chunks when no peaks inside and skip_after_n_peaks (#3356)
34+
35+
extractors:
36+
37+
* Pin `pyedflib` version after breaking change in annotations (#3644)
38+
* Add experiment_name annotation to open ephys (#3624)
39+
* Add `NwbTimeSeriesExtractor` to load non-electrical series data from NWB (#3587)
40+
* Add `stream_mode` as extra_requirements for NWB when streaming (#3548)
41+
* Fix cbin_file_path (#3524)
42+
* Expose reading attempts in Plexon2 (#3401)
43+
* Add neuronexus allego recording Extractor (#3235)
44+
45+
preprocessing:
46+
47+
* Check for channel_indices is None (#3636)
48+
* Fix silence periods (#3557)
49+
* Extend whitening tests (#3531)
50+
* Don't let decimate mess with times and skim tests (#3519)
51+
* Whitening fix - compute covariance matrix in float (#3505)
52+
53+
sorters:
54+
55+
* Change to default value `use_binary_file=True` for KS4 (#3614)
56+
* Remove Non-Serializable writing of json (#3482)
57+
* Sc2 fixes (#3250, #3518)
58+
59+
postprocessing:
60+
61+
* Add a fast correlogram merge (#3607)
62+
* Unify template and quality metrics (#3537)
63+
* Only load `template_metrics` extension on compute if keeping some metrics (#3478)
64+
* Unit localization (#3476)
65+
* Optimizations for template_similarity (numba and dependencies) (#3405)
66+
67+
qualitymetrics:
68+
69+
* Hard code `synchony_sizes` (#3559)
70+
* Unify template and quality metrics (#3537)
71+
* Fix dtype of quality metrics before and after merging (#3497)
72+
73+
curation:
74+
75+
* Small fixes in curation format and `apply_curation()` (#3601)
76+
* Refactoring auto_merge (#3435)
77+
* Automatic curation with metrics (#2918)
78+
79+
widgets:
80+
81+
* Make `time_range` conversion to array dtype `float64` (#3638)
82+
* Fix `plot_sorting_summary` widget (#3627)
83+
* Changes for spikeinterface-gui (#3616)
84+
* Patch to allow ipywidget plot_unit_templates to work with sparse templates (instead of analyzer) (#3575)
85+
* Allow `export_report` to run without waveforms (#3493)
86+
* Add vspacing_factor as a param for TracesWidget (#3461)
87+
88+
generators:
89+
90+
* Use strings as ids in generators (#3588)
91+
92+
93+
sortingcomponents:
94+
95+
* Split PCA (#3610)
96+
* Adding Hanning filtering (#3604)
97+
* Fix use of keep during run_sorter benchmark (#3556)
98+
* Clustering components api (#3533)
99+
* Kilosort-matching in SpikeInterface (#3488)
100+
* Matched filtering with both peak signs simultaneously (#2914)
101+
102+
motion correction:
103+
104+
* Multi-segment handling in motion interpolation (#3659)
105+
* MotionEstimationStudy : plot drift with the scatter plot (#3553)
106+
* Fix a cross-band interpolation bug, and allow time_vector in interpolate_motion (#3517)
107+
108+
documentation:
109+
110+
* Fix plot_1_automated_curation.py (#3674)
111+
* Extend templates extension docs (#3663)
112+
* Use SpikeInterface-ported pre-trained models in doc (#3652)
113+
* Dev Doc touchup (#3641)
114+
* Fix precision/recall in hybrid example (#3635)
115+
* Improve docstring of `get_neuropixels_sample_shifts` (#3620)
116+
* Switch RTD build to fail on gallery example failure (#3619)
117+
* Fix sphinx doc build (#3612)
118+
* Convert generated unit_ids in docs to strings (#3600)
119+
* Correct method default in docstring (#3570)
120+
* Add custom tutorials index page. (#3504)
121+
* Add error messaging around use of get data in templates (#3501)
122+
* Fix a few typos in the curation docs (#3496)
123+
* Improve error message for `set_probegroup`/`set_probe` (#3479)
124+
125+
continuous integration:
126+
127+
* Fix codecov tests (#3569)
128+
* Add python 313 to CI test (#3481)
129+
130+
packaging:
131+
132+
* Support numpy 2.0 (#3640)
133+
* Force latest hdmf-zarr version (#3639)
134+
* Update zarr version (#3598)
135+
136+
testing:
137+
138+
* Add python Numpy2.0 to CI test (#3481)
139+
140+
Contributors:
141+
142+
* @522848942
143+
* @JoeZiminski
144+
* @OlivierPeron
145+
* @alejoe91
146+
* @anoushkajain
147+
* @chrishalcrow
148+
* @cwindolf
149+
* @guptadivyansh
150+
* @h-mayorquin
151+
* @jakeswann1
152+
* @RobertoDF
153+
* @samuelgarcia
154+
* @yger
155+
* @zm711

doc/whatisnew.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Release notes
88
.. toctree::
99
:maxdepth: 1
1010

11+
releases/0.102.0.rst
1112
releases/0.101.2.rst
1213
releases/0.101.1.rst
1314
releases/0.101.0.rst

examples/tutorials/curation/plot_1_automated_curation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
# We can check that this is true by accessing the extension data.
8080

8181
all_metric_names = list(sorting_analyzer.get_extension('quality_metrics').get_data().keys()) + list(sorting_analyzer.get_extension('template_metrics').get_data().keys())
82-
print(set(all_metric_names) == set(model.feature_names_in_))
82+
print(set(model.feature_names_in_).issubset(set(all_metric_names)))
8383

8484
##############################################################################
8585
# Great! We can now use the model to predict labels. Here, we pass the HF repo id directly

pyproject.toml

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
[project]
22
name = "spikeinterface"
3-
version = "0.102.0"
3+
version = "0.102.1"
44
authors = [
55
{ name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
66
{ name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
77
]
88
description = "Python toolkit for analysis, visualization, and comparison of spike sorting output"
99
readme = "README.md"
10-
requires-python = ">=3.9,<3.13"
10+
requires-python = ">=3.9,<3.14"
1111
classifiers = [
1212
"Programming Language :: Python :: 3 :: Only",
1313
"License :: OSI Approved :: MIT License",
@@ -20,7 +20,8 @@ classifiers = [
2020

2121

2222
dependencies = [
23-
"numpy>=1.20",
23+
"numpy>=1.20;python_version<'3.13'",
24+
"numpy>=2.0.0;python_version>='3.13'",
2425
"threadpoolctl>=3.0.0",
2526
"tqdm",
2627
"zarr>=2.18,<3",
@@ -164,15 +165,6 @@ test = [
164165
# for sortingview backend
165166
"sortingview",
166167

167-
168-
## install tridesclous for testing ##
169-
"tridesclous>=1.6.8",
170-
171-
## sliding_nn
172-
"pymde",
173-
"torch",
174-
"pynndescent",
175-
176168
# curation
177169
"skops",
178170
"huggingface_hub",

src/spikeinterface/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
"""
2-
3-
4-
"""
1+
""" """
52

63
import importlib.metadata
74

src/spikeinterface/benchmark/benchmark_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ def load_folder(cls, folder):
430430

431431
result[k] = load(folder / k)
432432
elif format == "Motion":
433-
from spikeinterface.sortingcomponents.motion import Motion
433+
from spikeinterface.core.motion import Motion
434434

435435
result[k] = Motion.load(folder / k)
436436
elif format == "zarr_templates":

src/spikeinterface/benchmark/benchmark_motion_estimation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
import numpy as np
99

1010
from spikeinterface.core import get_noise_levels
11-
from .benchmark_base import Benchmark, BenchmarkStudy
12-
from .benchmark_plot_tools import _simpleaxis
11+
from spikeinterface.core.motion import Motion
1312
from spikeinterface.sortingcomponents.motion import estimate_motion
1413
from spikeinterface.sortingcomponents.peak_detection import detect_peaks
1514
from spikeinterface.sortingcomponents.peak_selection import select_peaks
1615
from spikeinterface.sortingcomponents.peak_localization import localize_peaks
1716
from spikeinterface.widgets import plot_probe_map
1817

19-
from spikeinterface.sortingcomponents.motion import Motion
18+
from .benchmark_base import Benchmark, BenchmarkStudy
19+
from .benchmark_plot_tools import _simpleaxis
2020

2121
# import MEArec as mr
2222

0 commit comments

Comments
 (0)