spikeinterface 0.103.0__tar.gz → 0.103.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. {spikeinterface-0.103.0/src/spikeinterface.egg-info → spikeinterface-0.103.2}/PKG-INFO +7 -6
  2. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/pyproject.toml +7 -6
  3. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_base.py +1 -1
  4. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_clustering.py +18 -3
  5. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_matching.py +13 -2
  6. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_motion_estimation.py +21 -2
  7. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_detection.py +53 -30
  8. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_localization.py +8 -0
  9. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_peak_selection.py +1 -1
  10. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_plot_tools.py +164 -51
  11. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_sorter.py +13 -2
  12. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/analyzer_extension_core.py +12 -4
  13. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/base.py +1 -1
  14. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/generate.py +26 -24
  15. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/job_tools.py +4 -0
  16. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/node_pipeline.py +0 -1
  17. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/recording_tools.py +14 -27
  18. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sorting_tools.py +10 -7
  19. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sortinganalyzer.py +60 -15
  20. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sparsity.py +12 -0
  21. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/template_tools.py +0 -1
  22. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/waveform_tools.py +50 -9
  23. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/__init__.py +1 -1
  24. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/auto_merge.py +27 -8
  25. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_format.py +45 -68
  26. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_model.py +47 -24
  27. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curation_tools.py +1 -1
  28. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/model_based_curation.py +1 -6
  29. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/train_manual_curation.py +19 -11
  30. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/__init__.py +1 -0
  31. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +13 -5
  32. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/openephys.py +235 -41
  33. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/plexon2.py +8 -2
  34. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neuropixels_utils.py +20 -19
  35. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/phykilosortextractors.py +27 -0
  36. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/drift_tools.py +2 -0
  37. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/drifting_generator.py +16 -6
  38. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/splitting_tools.py +4 -4
  39. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/spike_locations.py +1 -1
  40. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/template_similarity.py +87 -41
  41. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/detect_bad_channels.py +20 -1
  42. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/motion.py +16 -11
  43. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/misc_metrics.py +51 -85
  44. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +26 -7
  45. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/quality_metric_list.py +12 -0
  46. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/utils.py +23 -0
  47. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort4.py +30 -4
  48. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/pykilosort.py +1 -1
  49. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/rt_sort.py +1 -0
  50. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/simplesorter.py +4 -2
  51. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/spyking_circus2.py +165 -177
  52. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/tridesclous2.py +66 -66
  53. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/misc.py +6 -6
  54. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/__init__.py +5 -0
  55. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/cleaning_tools.py +4 -3
  56. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/dummy.py +3 -0
  57. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/graph_clustering.py +54 -56
  58. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/isosplit_isocut.py +653 -0
  59. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/iterative_hdbscan.py +170 -0
  60. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/iterative_isosplit.py +454 -0
  61. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/split.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/itersplit_tools.py +50 -26
  62. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/main.py +18 -10
  63. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/merging_tools.py +644 -0
  64. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/method_list.py +27 -0
  65. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/positions.py +59 -0
  66. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/clustering/random_projections.py +165 -0
  67. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/tools.py +42 -39
  68. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/base.py +2 -2
  69. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/circus.py +46 -52
  70. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/main.py +116 -0
  71. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/method_list.py +6 -7
  72. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/nearest.py +194 -0
  73. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/tdc.py → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/matching/tdc_peeler.py +112 -24
  74. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/wobble.py +40 -16
  75. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/dredge.py +12 -4
  76. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/medicine.py +4 -2
  77. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +1 -2
  78. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/__init__.py +2 -0
  79. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/by_channel.py +313 -0
  80. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/iterative.py +210 -0
  81. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/locally_exclusive.py +513 -0
  82. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/main.py +116 -0
  83. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/matched_filtering.py +217 -0
  84. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_detection/method_list.py +18 -0
  85. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/__init__.py +6 -0
  86. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/base.py +20 -0
  87. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/center_of_mass.py +69 -0
  88. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/grid.py +172 -0
  89. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/main.py +175 -0
  90. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/method_list.py +6 -0
  91. spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/peak_localization/monopolar.py +109 -0
  92. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/tools.py +74 -39
  93. {spikeinterface-0.103.0/src/spikeinterface/sortingcomponents → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/waveforms}/features_from_peaks.py +7 -4
  94. {spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering → spikeinterface-0.103.2/src/spikeinterface/sortingcomponents/waveforms}/peak_svd.py +11 -4
  95. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +2 -1
  96. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/collision.py +1 -1
  97. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/metrics.py +71 -24
  98. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/traces.py +8 -1
  99. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_locations.py +16 -8
  100. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_summary.py +7 -0
  101. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils.py +7 -4
  102. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_ipywidgets.py +46 -6
  103. {spikeinterface-0.103.0 → spikeinterface-0.103.2/src/spikeinterface.egg-info}/PKG-INFO +7 -6
  104. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/SOURCES.txt +25 -21
  105. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/requires.txt +5 -4
  106. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -5
  107. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/circus.py +0 -269
  108. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -45
  109. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -211
  110. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/merge.py +0 -836
  111. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/method_list.py +0 -37
  112. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position.py +0 -80
  113. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +0 -193
  114. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +0 -243
  115. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +0 -100
  116. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/random_projections.py +0 -189
  117. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +0 -539
  118. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +0 -657
  119. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/tdc.py +0 -217
  120. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -26
  121. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/main.py +0 -86
  122. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/naive.py +0 -74
  123. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/matching/tools.py +0 -138
  124. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/peak_detection.py +0 -1327
  125. spikeinterface-0.103.0/src/spikeinterface/sortingcomponents/peak_localization.py +0 -483
  126. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/LICENSE +0 -0
  127. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/README.md +0 -0
  128. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/setup.cfg +0 -0
  129. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/__init__.py +0 -0
  130. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/__init__.py +0 -0
  131. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_merging.py +0 -0
  132. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_motion_interpolation.py +0 -0
  133. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_sorter_without_gt.py +0 -0
  134. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
  135. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/benchmark/residual_analysis.py +0 -0
  136. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/__init__.py +0 -0
  137. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/basecomparison.py +0 -0
  138. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/collision.py +0 -0
  139. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/comparisontools.py +0 -0
  140. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/correlogram.py +0 -0
  141. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/groundtruthstudy.py +0 -0
  142. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/hybrid.py +0 -0
  143. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/multicomparisons.py +0 -0
  144. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/comparison/paircomparisons.py +0 -0
  145. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/__init__.py +0 -0
  146. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baseevent.py +0 -0
  147. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baserecording.py +0 -0
  148. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/baserecordingsnippets.py +0 -0
  149. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/basesnippets.py +0 -0
  150. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/basesorting.py +0 -0
  151. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/binaryfolder.py +0 -0
  152. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/binaryrecordingextractor.py +0 -0
  153. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/channelsaggregationrecording.py +0 -0
  154. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/channelslice.py +0 -0
  155. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/core_tools.py +0 -0
  156. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/datasets.py +0 -0
  157. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/frameslicerecording.py +0 -0
  158. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/frameslicesorting.py +0 -0
  159. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/globals.py +0 -0
  160. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/loading.py +0 -0
  161. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/motion.py +0 -0
  162. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
  163. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
  164. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npzfolder.py +0 -0
  165. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/npzsortingextractor.py +0 -0
  166. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/numpyextractors.py +0 -0
  167. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/old_api_utils.py +0 -0
  168. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/segmentutils.py +0 -0
  169. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/snippets_tools.py +0 -0
  170. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/sortingfolder.py +0 -0
  171. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/template.py +0 -0
  172. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/testing.py +0 -0
  173. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/testing_tools.py +0 -0
  174. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
  175. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
  176. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +0 -0
  177. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/zarrextractors.py +0 -0
  178. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
  179. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/curationsorting.py +0 -0
  180. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
  181. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
  182. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
  183. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/remove_redundant.py +0 -0
  184. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/sortingview_curation.py +0 -0
  185. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/curation/splitunitsorting.py +0 -0
  186. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/__init__.py +0 -0
  187. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/report.py +0 -0
  188. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_ibl.py +0 -0
  189. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_phy.py +0 -0
  190. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/exporters/to_pynapple.py +0 -0
  191. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
  192. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/bids.py +0 -0
  193. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/cbin_ibl.py +0 -0
  194. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
  195. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
  196. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/extractor_classes.py +0 -0
  197. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
  198. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
  199. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/iblextractors.py +0 -0
  200. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/klustaextractors.py +0 -0
  201. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
  202. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mclustextractors.py +0 -0
  203. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
  204. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/mdaextractors.py +0 -0
  205. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/__init__.py +0 -0
  206. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
  207. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/axon.py +0 -0
  208. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
  209. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/biocam.py +0 -0
  210. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/blackrock.py +0 -0
  211. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
  212. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
  213. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
  214. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
  215. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
  216. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
  217. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
  218. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
  219. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
  220. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuronexus.py +0 -0
  221. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
  222. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
  223. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
  224. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
  225. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
  226. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/spikeglx.py +0 -0
  227. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
  228. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/nwbextractors.py +0 -0
  229. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/shybridextractors.py +0 -0
  230. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
  231. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
  232. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/toy_example.py +0 -0
  233. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/tridesclousextractors.py +0 -0
  234. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
  235. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
  236. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/whitematterrecordingextractor.py +0 -0
  237. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/extractors/yassextractors.py +0 -0
  238. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/full.py +0 -0
  239. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/__init__.py +0 -0
  240. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/hybrid_tools.py +0 -0
  241. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/noise_tools.py +0 -0
  242. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/generation/template_database.py +0 -0
  243. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/__init__.py +0 -0
  244. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
  245. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
  246. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/correlograms.py +0 -0
  247. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/isi.py +0 -0
  248. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/localization_tools.py +0 -0
  249. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/noise_level.py +0 -0
  250. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/principal_component.py +0 -0
  251. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -0
  252. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/template_metrics.py +0 -0
  253. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/postprocessing/unit_locations.py +0 -0
  254. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/__init__.py +0 -0
  255. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
  256. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/astype.py +0 -0
  257. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/average_across_direction.py +0 -0
  258. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
  259. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/clip.py +0 -0
  260. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/common_reference.py +0 -0
  261. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
  262. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/decimate.py +0 -0
  263. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
  264. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
  265. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
  266. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
  267. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
  268. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/depth_order.py +0 -0
  269. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
  270. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter.py +0 -0
  271. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
  272. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
  273. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
  274. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
  275. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
  276. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
  277. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/pipeline.py +0 -0
  278. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/preprocessing_classes.py +0 -0
  279. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
  280. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/rectify.py +0 -0
  281. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
  282. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/resample.py +0 -0
  283. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/scale.py +0 -0
  284. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/silence_periods.py +0 -0
  285. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
  286. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/whiten.py +0 -0
  287. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
  288. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/__init__.py +0 -0
  289. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/qualitymetrics/pca_metrics.py +0 -0
  290. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/__init__.py +0 -0
  291. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/basesorter.py +0 -0
  292. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/container_tools.py +0 -0
  293. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/__init__.py +0 -0
  294. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/combinato.py +0 -0
  295. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/hdsort.py +0 -0
  296. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
  297. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
  298. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/ironclust.py +0 -0
  299. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort.py +0 -0
  300. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
  301. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
  302. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
  303. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
  304. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
  305. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
  306. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
  307. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/kilosortbase.py +0 -0
  308. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/klusta.py +0 -0
  309. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
  310. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
  311. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
  312. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
  313. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
  314. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
  315. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus.py +0 -0
  316. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
  317. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
  318. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
  319. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/yass.py +0 -0
  320. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
  321. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/__init__.py +0 -0
  322. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/internal/si_based.py +0 -0
  323. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/launcher.py +0 -0
  324. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/runsorter.py +0 -0
  325. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/sorterlist.py +0 -0
  326. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/__init__.py +0 -0
  327. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
  328. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
  329. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
  330. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
  331. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/clustering/graph_tools.py +0 -0
  332. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
  333. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -0
  334. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/decentralized.py +0 -0
  335. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +0 -0
  336. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
  337. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +0 -0
  338. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -0
  339. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
  340. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
  341. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +0 -0
  342. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
  343. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
  344. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
  345. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
  346. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/__init__.py +0 -0
  347. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
  348. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/amplitudes.py +0 -0
  349. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/autocorrelograms.py +0 -0
  350. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/base.py +0 -0
  351. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/comparison.py +0 -0
  352. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/crosscorrelograms.py +0 -0
  353. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/drift_templates.py +0 -0
  354. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/gtstudy.py +0 -0
  355. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/isi_distribution.py +0 -0
  356. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/motion.py +0 -0
  357. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/multicomparison.py +0 -0
  358. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/peak_activity.py +0 -0
  359. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
  360. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/potential_merges.py +0 -0
  361. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/probe_map.py +0 -0
  362. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/quality_metrics.py +0 -0
  363. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/rasters.py +0 -0
  364. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/sorting_summary.py +0 -0
  365. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spike_locations.py +0 -0
  366. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spike_locations_by_time.py +0 -0
  367. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
  368. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/template_metrics.py +0 -0
  369. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/template_similarity.py +0 -0
  370. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_depths.py +0 -0
  371. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_presence.py +0 -0
  372. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
  373. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_templates.py +0 -0
  374. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_waveforms.py +0 -0
  375. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
  376. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
  377. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/utils_sortingview.py +0 -0
  378. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface/widgets/widget_list.py +0 -0
  379. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
  380. {spikeinterface-0.103.0 → spikeinterface-0.103.2}/src/spikeinterface.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spikeinterface
3
- Version: 0.103.0
3
+ Version: 0.103.2
4
4
  Summary: Python toolkit for analysis, visualization, and comparison of spike sorting output
5
5
  Author-email: Alessio Buccino <alessiop.buccino@gmail.com>, Samuel Garcia <sam.garcia.die@gmail.com>
6
6
  Project-URL: homepage, https://github.com/SpikeInterface/spikeinterface
@@ -14,7 +14,7 @@ Classifier: Operating System :: POSIX :: Linux
14
14
  Classifier: Operating System :: Microsoft :: Windows
15
15
  Classifier: Operating System :: MacOS
16
16
  Classifier: Operating System :: OS Independent
17
- Requires-Python: <3.14,>=3.9
17
+ Requires-Python: >=3.9
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: numpy>=1.20; python_version < "3.13"
@@ -22,8 +22,8 @@ Requires-Dist: numpy>=2.0.0; python_version >= "3.13"
22
22
  Requires-Dist: threadpoolctl>=3.0.0
23
23
  Requires-Dist: tqdm
24
24
  Requires-Dist: zarr<3,>=2.18
25
- Requires-Dist: neo>=0.14.1
26
- Requires-Dist: probeinterface>=0.3.0
25
+ Requires-Dist: neo>=0.14.3
26
+ Requires-Dist: probeinterface>=0.3.1
27
27
  Requires-Dist: packaging
28
28
  Requires-Dist: pydantic
29
29
  Requires-Dist: numcodecs<0.16.0
@@ -57,7 +57,7 @@ Requires-Dist: scikit-learn; extra == "full"
57
57
  Requires-Dist: networkx; extra == "full"
58
58
  Requires-Dist: distinctipy; extra == "full"
59
59
  Requires-Dist: matplotlib>=3.6; extra == "full"
60
- Requires-Dist: cuda-python; platform_system != "Darwin" and extra == "full"
60
+ Requires-Dist: cuda-python>=11.8.6; platform_system != "Darwin" and extra == "full"
61
61
  Requires-Dist: numba>=0.59; extra == "full"
62
62
  Requires-Dist: skops; extra == "full"
63
63
  Requires-Dist: huggingface_hub; extra == "full"
@@ -100,12 +100,13 @@ Requires-Dist: huggingface_hub; extra == "test"
100
100
  Requires-Dist: pytest-mock; extra == "test"
101
101
  Provides-Extra: docs
102
102
  Requires-Dist: Sphinx; extra == "docs"
103
+ Requires-Dist: ipython; extra == "docs"
103
104
  Requires-Dist: sphinx_rtd_theme>=1.2; extra == "docs"
104
105
  Requires-Dist: sphinx-gallery; extra == "docs"
105
106
  Requires-Dist: sphinx-design; extra == "docs"
106
107
  Requires-Dist: numpydoc; extra == "docs"
107
- Requires-Dist: ipython; extra == "docs"
108
108
  Requires-Dist: sphinxcontrib-jquery; extra == "docs"
109
+ Requires-Dist: autodoc_pydantic; extra == "docs"
109
110
  Requires-Dist: MEArec; extra == "docs"
110
111
  Requires-Dist: pandas; extra == "docs"
111
112
  Requires-Dist: hdbscan>=0.8.33; extra == "docs"
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "spikeinterface"
3
- version = "0.103.0"
3
+ version = "0.103.2"
4
4
  authors = [
5
5
  { name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
6
6
  { name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
7
7
  ]
8
8
  description = "Python toolkit for analysis, visualization, and comparison of spike sorting output"
9
9
  readme = "README.md"
10
- requires-python = ">=3.9,<3.14"
10
+ requires-python = ">=3.9"
11
11
  classifiers = [
12
12
  "Programming Language :: Python :: 3 :: Only",
13
13
  "License :: OSI Approved :: MIT License",
@@ -25,8 +25,8 @@ dependencies = [
25
25
  "threadpoolctl>=3.0.0",
26
26
  "tqdm",
27
27
  "zarr>=2.18,<3",
28
- "neo>=0.14.1",
29
- "probeinterface>=0.3.0",
28
+ "neo>=0.14.3",
29
+ "probeinterface>=0.3.1",
30
30
  "packaging",
31
31
  "pydantic",
32
32
  "numcodecs<0.16.0", # For supporting zarr < 3
@@ -100,7 +100,7 @@ full = [
100
100
  "networkx",
101
101
  "distinctipy",
102
102
  "matplotlib>=3.6", # matplotlib.colormaps
103
- "cuda-python; platform_system != 'Darwin'",
103
+ "cuda-python>=11.8.6; platform_system != 'Darwin'",
104
104
  "numba>=0.59",
105
105
  "skops",
106
106
  "huggingface_hub"
@@ -194,12 +194,13 @@ test = [
194
194
 
195
195
  docs = [
196
196
  "Sphinx",
197
+ "ipython",
197
198
  "sphinx_rtd_theme>=1.2",
198
199
  "sphinx-gallery",
199
200
  "sphinx-design",
200
201
  "numpydoc",
201
- "ipython",
202
202
  "sphinxcontrib-jquery",
203
+ "autodoc_pydantic",
203
204
 
204
205
  # for notebooks in the gallery
205
206
  "MEArec", # Use as an example
@@ -431,7 +431,7 @@ class BenchmarkStudy:
431
431
  if verbose:
432
432
  print("### Compute result", key, "###")
433
433
  benchmark = self.benchmarks[key]
434
- assert benchmark is not None
434
+ assert benchmark is not None, f"Benchmkark for key {key} has not been run yet!"
435
435
  benchmark.compute_result(**result_params)
436
436
  benchmark.save_result(self.folder / "results" / self.key_to_str(key))
437
437
 
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from spikeinterface.sortingcomponents.clustering import find_cluster_from_peaks
3
+ from spikeinterface.sortingcomponents.clustering import find_clusters_from_peaks
4
4
  from spikeinterface.core import NumpySorting
5
5
  from spikeinterface.comparison import GroundTruthComparison
6
6
  from spikeinterface.widgets import (
@@ -30,8 +30,8 @@ class ClusteringBenchmark(Benchmark):
30
30
  self.result = {}
31
31
 
32
32
  def run(self, **job_kwargs):
33
- labels, peak_labels = find_cluster_from_peaks(
34
- self.recording, self.peaks, method=self.method, method_kwargs=self.method_kwargs, **job_kwargs
33
+ labels, peak_labels = find_clusters_from_peaks(
34
+ self.recording, self.peaks, method=self.method, method_kwargs=self.method_kwargs, job_kwargs=job_kwargs
35
35
  )
36
36
  self.result["peak_labels"] = peak_labels
37
37
 
@@ -95,6 +95,16 @@ class ClusteringBenchmark(Benchmark):
95
95
 
96
96
 
97
97
  class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
98
+ """
99
+ Benchmark study to compare clustering methods.
100
+
101
+ The ground truth sorting objects must be given and method outputs
102
+ will be compared to them.
103
+
104
+ The input of methods are the detected peaks. Because the clustering
105
+ can be performed on only a subset of the detected peaks, then selected peak
106
+ must be also given as index of all spikes.
107
+ """
98
108
 
99
109
  benchmark_class = ClusteringBenchmark
100
110
 
@@ -182,6 +192,11 @@ class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
182
192
 
183
193
  return plot_performances_vs_snr(self, **kwargs)
184
194
 
195
+ def plot_performances_vs_firing_rate(self, **kwargs):
196
+ from .benchmark_plot_tools import plot_performances_vs_firing_rate
197
+
198
+ return plot_performances_vs_firing_rate(self, **kwargs)
199
+
185
200
  def plot_performances_comparison(self, *args, **kwargs):
186
201
  from .benchmark_plot_tools import plot_performances_comparison
187
202
 
@@ -21,13 +21,14 @@ class MatchingBenchmark(Benchmark):
21
21
  self.recording = recording
22
22
  self.gt_sorting = gt_sorting
23
23
  self.method = params["method"]
24
- self.templates = params["method_kwargs"]["templates"]
24
+ # self.templates = params["method_kwargs"]["templates"]
25
+ self.templates = params["templates"]
25
26
  self.method_kwargs = params["method_kwargs"]
26
27
  self.result = {}
27
28
 
28
29
  def run(self, **job_kwargs):
29
30
  spikes = find_spikes_from_templates(
30
- self.recording, method=self.method, method_kwargs=self.method_kwargs, **job_kwargs
31
+ self.recording, self.templates, method=self.method, method_kwargs=self.method_kwargs, job_kwargs=job_kwargs
31
32
  )
32
33
  unit_ids = self.templates.unit_ids
33
34
  sorting = np.zeros(spikes.size, dtype=minimum_spike_dtype)
@@ -56,6 +57,16 @@ class MatchingBenchmark(Benchmark):
56
57
 
57
58
 
58
59
  class MatchingStudy(BenchmarkStudy, MixinStudyUnitCount):
60
+ """
61
+ Benchmark study to compare template matchong methods.
62
+
63
+ The ground truth sorting objects must be given and method outputs
64
+ will be compared to them.
65
+
66
+ Templates must be also given. Note that the full template can be given but also
67
+ only a partial catalogue can be given to challenge the template matching
68
+ methods when catalogue is not entirely known.
69
+ """
59
70
 
60
71
  benchmark_class = MatchingBenchmark
61
72
 
@@ -89,7 +89,9 @@ class MotionEstimationBenchmark(Benchmark):
89
89
  noise_levels = get_noise_levels(self.recording, return_in_uV=False, **job_kwargs)
90
90
 
91
91
  t0 = time.perf_counter()
92
- peaks = detect_peaks(self.recording, noise_levels=noise_levels, **p["detect_kwargs"], **job_kwargs)
92
+ detect_kwargs = p["detect_kwargs"].copy()
93
+ detect_kwargs["noise_levels"] = noise_levels
94
+ peaks = detect_peaks(self.recording, method_kwargs=detect_kwargs, job_kwargs=job_kwargs)
93
95
  t1 = time.perf_counter()
94
96
  if p["select_kwargs"] is not None:
95
97
  selected_peaks = select_peaks(self.peaks, **p["select_kwargs"], **job_kwargs)
@@ -97,7 +99,9 @@ class MotionEstimationBenchmark(Benchmark):
97
99
  selected_peaks = peaks
98
100
 
99
101
  t2 = time.perf_counter()
100
- peak_locations = localize_peaks(self.recording, selected_peaks, **p["localize_kwargs"], **job_kwargs)
102
+ peak_locations = localize_peaks(
103
+ self.recording, selected_peaks, method_kwargs=p["localize_kwargs"], job_kwargs=job_kwargs
104
+ )
101
105
  t3 = time.perf_counter()
102
106
  motion = estimate_motion(self.recording, selected_peaks, peak_locations, **p["estimate_motion_kwargs"])
103
107
  t4 = time.perf_counter()
@@ -151,6 +155,15 @@ class MotionEstimationBenchmark(Benchmark):
151
155
 
152
156
 
153
157
  class MotionEstimationStudy(BenchmarkStudy):
158
+ """
159
+ Benchmark study to compare motion estimation methods.
160
+
161
+ The ground truth displaements of all units must be known and method outputs
162
+ will be compared to them.
163
+
164
+ See also :py:func:`~spikeinterface.generation.generate_drifting_recording`,
165
+ for generation drifting recording.
166
+ """
154
167
 
155
168
  benchmark_class = MotionEstimationBenchmark
156
169
 
@@ -240,6 +253,8 @@ class MotionEstimationStudy(BenchmarkStudy):
240
253
 
241
254
  # ax0.set_ylim()
242
255
 
256
+ return fig
257
+
243
258
  def plot_errors(self, case_keys=None, figsize=None, lim=None):
244
259
  import matplotlib.pyplot as plt
245
260
 
@@ -305,6 +320,8 @@ class MotionEstimationStudy(BenchmarkStudy):
305
320
  if lim is not None:
306
321
  ax.set_ylim(0, lim)
307
322
 
323
+ return fig
324
+
308
325
  def plot_summary_errors(self, case_keys=None, show_legend=True, figsize=(15, 5)):
309
326
  import matplotlib.pyplot as plt
310
327
 
@@ -368,6 +385,8 @@ class MotionEstimationStudy(BenchmarkStudy):
368
385
 
369
386
  despine(ax2)
370
387
 
388
+ return fig
389
+
371
390
  # ax1.sharey(ax0)
372
391
  # ax2.sharey(ax0)
373
392
 
@@ -33,7 +33,7 @@ class PeakDetectionBenchmark(Benchmark):
33
33
  self.result = {}
34
34
 
35
35
  def run(self, **job_kwargs):
36
- peaks = detect_peaks(self.recording, self.method, **self.params, **job_kwargs)
36
+ peaks = detect_peaks(self.recording, self.method, method_kwargs=self.params, job_kwargs=job_kwargs)
37
37
  self.result["peaks"] = peaks
38
38
 
39
39
  def compute_result(self, **result_params):
@@ -57,7 +57,7 @@ class PeakDetectionBenchmark(Benchmark):
57
57
  spikes, self.recording.sampling_frequency, unit_ids=self.recording.channel_ids
58
58
  )
59
59
 
60
- self.result["gt_comparison"] = GroundTruthComparison(
60
+ self.result["gt_comparison_by_channels"] = GroundTruthComparison(
61
61
  self.result["gt_on_channels"], self.result["peak_on_channels"], exhaustive_gt=self.exhaustive_gt
62
62
  )
63
63
 
@@ -82,41 +82,47 @@ class PeakDetectionBenchmark(Benchmark):
82
82
  sorting["segment_index"] = peaks[detected_matches]["segment_index"]
83
83
  order = np.lexsort((sorting["sample_index"], sorting["segment_index"]))
84
84
  sorting = sorting[order]
85
- self.result["sliced_gt_sorting"] = NumpySorting(
85
+ self.result["matched_sorting"] = NumpySorting(
86
86
  sorting, self.recording.sampling_frequency, self.gt_sorting.unit_ids
87
87
  )
88
- self.result["sliced_gt_comparison"] = GroundTruthComparison(
89
- self.gt_sorting, self.result["sliced_gt_sorting"], exhaustive_gt=self.exhaustive_gt
88
+ self.result["gt_comparison"] = GroundTruthComparison(
89
+ self.gt_sorting, self.result["matched_sorting"], exhaustive_gt=self.exhaustive_gt
90
90
  )
91
91
 
92
92
  ratio = 100 * len(gt_matches) / len(times2)
93
93
  print("Only {0:.2f}% of gt peaks are matched to detected peaks".format(ratio))
94
94
 
95
95
  sorting_analyzer = create_sorting_analyzer(
96
- self.result["sliced_gt_sorting"], self.recording, format="memory", sparse=False, **job_kwargs
96
+ self.result["matched_sorting"], self.recording, format="memory", sparse=False, **job_kwargs
97
97
  )
98
98
  sorting_analyzer.compute("random_spikes")
99
99
  sorting_analyzer.compute("templates", **job_kwargs)
100
100
 
101
- self.result["templates"] = sorting_analyzer.get_extension("templates").get_data()
101
+ self.result["matched_templates"] = sorting_analyzer.get_extension("templates").get_data()
102
102
 
103
103
  _run_key_saved = [("peaks", "npy")]
104
104
 
105
105
  _result_key_saved = [
106
+ ("gt_comparison_by_channels", "pickle"),
107
+ ("matched_sorting", "sorting"),
106
108
  ("gt_comparison", "pickle"),
107
- ("sliced_gt_sorting", "sorting"),
108
- ("sliced_gt_comparison", "pickle"),
109
- ("sliced_gt_sorting", "sorting"),
110
109
  ("peak_on_channels", "sorting"),
111
110
  ("gt_on_channels", "sorting"),
112
111
  ("matches", "pickle"),
113
- ("templates", "npy"),
112
+ ("matched_templates", "npy"),
114
113
  ("gt_amplitudes", "npy"),
115
114
  ("gt_templates", "npy"),
116
115
  ]
117
116
 
118
117
 
119
118
  class PeakDetectionStudy(BenchmarkStudy):
119
+ """
120
+ Benchmark study to compare peak detection methods.
121
+
122
+ The ground truth sorting must be given.
123
+ Peak detected by methods will be compared to the ground truth to estimate the
124
+ recall.
125
+ """
120
126
 
121
127
  benchmark_class = PeakDetectionBenchmark
122
128
 
@@ -128,6 +134,11 @@ class PeakDetectionStudy(BenchmarkStudy):
128
134
  benchmark = PeakDetectionBenchmark(recording, gt_sorting, params, **init_kwargs)
129
135
  return benchmark
130
136
 
137
+ def plot_performances_vs_snr(self, **kwargs):
138
+ from .benchmark_plot_tools import plot_performances_vs_snr
139
+
140
+ return plot_performances_vs_snr(self, **kwargs)
141
+
131
142
  def plot_agreements_by_channels(self, case_keys=None, figsize=(15, 15)):
132
143
  if case_keys is None:
133
144
  case_keys = list(self.cases.keys())
@@ -138,7 +149,7 @@ class PeakDetectionStudy(BenchmarkStudy):
138
149
  for count, key in enumerate(case_keys):
139
150
  ax = axs[0, count]
140
151
  ax.set_title(self.cases[key]["label"])
141
- plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
152
+ plot_agreement_matrix(self.get_result(key)["gt_comparison_by_channels"], ax=ax)
142
153
 
143
154
  def plot_agreements_by_units(self, case_keys=None, figsize=(15, 15)):
144
155
  if case_keys is None:
@@ -150,37 +161,49 @@ class PeakDetectionStudy(BenchmarkStudy):
150
161
  for count, key in enumerate(case_keys):
151
162
  ax = axs[0, count]
152
163
  ax.set_title(self.cases[key]["label"])
153
- plot_agreement_matrix(self.get_result(key)["sliced_gt_comparison"], ax=ax)
164
+ plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
154
165
 
155
- def plot_detected_amplitudes(self, case_keys=None, figsize=(15, 5), detect_threshold=None, axs=None):
166
+ def plot_detected_amplitude_distributions(
167
+ self, case_keys=None, show_legend=True, detect_threshold=None, figsize=(15, 5), ax=None
168
+ ):
156
169
 
157
170
  if case_keys is None:
158
171
  case_keys = list(self.cases.keys())
159
172
  import matplotlib.pyplot as plt
160
173
 
161
- if axs is None:
162
- fig, axs = plt.subplots(ncols=len(case_keys), figsize=figsize, squeeze=False)
174
+ if ax is None:
175
+ fig, ax = plt.subplots(figsize=figsize)
163
176
  else:
164
- fig = axs[0].get_figure()
165
- assert len(axs) == len(case_keys), "axs should be the same length as case_keys"
177
+ fig = ax.get_figure()
178
+
179
+ # plot only the first key for gt amplitude
180
+ # TODO make a loop for all of then
181
+ key0 = case_keys[0]
182
+ data2 = self.get_result(key0)["gt_amplitudes"]
183
+ bins = np.linspace(data2.min(), data2.max(), 100)
184
+ ax.hist(data2, bins=bins, alpha=0.1, label="gt", color="k")
166
185
 
167
186
  for count, key in enumerate(case_keys):
168
- ax = axs[count]
169
187
  despine(ax)
170
188
  data1 = self.get_result(key)["peaks"]["amplitude"]
171
- data2 = self.get_result(key)["gt_amplitudes"]
189
+
172
190
  color = self.get_colors()[key]
173
- bins = np.linspace(data2.min(), data2.max(), 100)
174
- ax.hist(data1, bins=bins, label="detected", histtype="step", color=color, linewidth=2)
175
- ax.hist(data2, bins=bins, alpha=0.1, label="gt", color="k")
176
- ax.set_yscale("log")
191
+
192
+ label = self.cases[key]["label"]
193
+ ax.hist(data1, bins=bins, label=label, histtype="step", color=color, linewidth=2)
194
+
177
195
  # ax.set_title(self.cases[key]["label"])
196
+
197
+ ax.set_yscale("log")
198
+
199
+ if detect_threshold is not None:
200
+ noise_levels = get_noise_levels(self.benchmarks[key].recording, return_in_uV=False).mean()
201
+ ymin, ymax = ax.get_ylim()
202
+ abs_threshold = -detect_threshold * noise_levels
203
+ ax.plot([abs_threshold, abs_threshold], [ymin, ymax], "k--")
204
+
205
+ if show_legend:
178
206
  ax.legend()
179
- if detect_threshold is not None:
180
- noise_levels = get_noise_levels(self.benchmarks[key].recording, return_in_uV=False).mean()
181
- ymin, ymax = ax.get_ylim()
182
- abs_threshold = -detect_threshold * noise_levels
183
- ax.plot([abs_threshold, abs_threshold], [ymin, ymax], "k--")
184
207
 
185
208
  return fig
186
209
 
@@ -266,7 +289,7 @@ class PeakDetectionStudy(BenchmarkStudy):
266
289
  import sklearn.metrics
267
290
 
268
291
  gt_templates = self.get_result(key)["gt_templates"]
269
- found_templates = self.get_result(key)["templates"]
292
+ found_templates = self.get_result(key)["matched_templates"]
270
293
  num_templates = len(gt_templates)
271
294
  distances = np.zeros(num_templates)
272
295
 
@@ -199,6 +199,14 @@ class UnitLocalizationBenchmark(Benchmark):
199
199
 
200
200
 
201
201
  class UnitLocalizationStudy(BenchmarkStudy):
202
+ """
203
+ Benchmark study to compare peaks localization methods.
204
+
205
+ The ground truth position of units must be known and method outputs
206
+ will be compared to them.
207
+
208
+ See also UnitLocalizationStudy.
209
+ """
202
210
 
203
211
  benchmark_class = UnitLocalizationBenchmark
204
212
 
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from spikeinterface.sortingcomponents.clustering import find_cluster_from_peaks
3
+ from spikeinterface.sortingcomponents.clustering import find_clusters_from_peaks
4
4
  from spikeinterface.core import NumpySorting
5
5
  from spikeinterface.comparison import GroundTruthComparison
6
6
  from spikeinterface.comparison.comparisontools import make_matching_events