spikeinterface 0.102.0__tar.gz → 0.102.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 (348) hide show
  1. {spikeinterface-0.102.0/src/spikeinterface.egg-info → spikeinterface-0.102.2}/PKG-INFO +14 -15
  2. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/pyproject.toml +15 -20
  3. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_base.py +202 -30
  4. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_clustering.py +28 -106
  5. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_matching.py +17 -36
  6. spikeinterface-0.102.2/src/spikeinterface/benchmark/benchmark_merging.py +173 -0
  7. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_motion_estimation.py +28 -28
  8. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_peak_detection.py +41 -18
  9. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_peak_localization.py +10 -8
  10. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_peak_selection.py +1 -1
  11. spikeinterface-0.102.2/src/spikeinterface/benchmark/benchmark_plot_tools.py +786 -0
  12. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_sorter.py +24 -4
  13. spikeinterface-0.102.2/src/spikeinterface/benchmark/benchmark_tools.py +17 -0
  14. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/basecomparison.py +22 -8
  15. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/collision.py +3 -1
  16. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/correlogram.py +3 -1
  17. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/multicomparisons.py +8 -2
  18. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/paircomparisons.py +4 -13
  19. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/__init__.py +2 -0
  20. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/base.py +48 -6
  21. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/baserecording.py +20 -26
  22. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/baserecordingsnippets.py +2 -2
  23. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/basesorting.py +52 -18
  24. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/binaryrecordingextractor.py +1 -11
  25. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/channelsaggregationrecording.py +62 -10
  26. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/channelslice.py +8 -6
  27. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/core_tools.py +44 -0
  28. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/frameslicerecording.py +0 -1
  29. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/frameslicesorting.py +0 -1
  30. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/generate.py +2 -2
  31. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/loading.py +3 -3
  32. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/motion.py +8 -0
  33. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/node_pipeline.py +25 -3
  34. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/npyfoldersnippets.py +0 -2
  35. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/numpyextractors.py +56 -11
  36. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/recording_tools.py +3 -1
  37. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/segmentutils.py +2 -0
  38. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/snippets_tools.py +1 -1
  39. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/sorting_tools.py +8 -13
  40. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/sortinganalyzer.py +175 -38
  41. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/sparsity.py +47 -4
  42. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/template_tools.py +4 -1
  43. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/testing.py +0 -1
  44. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/unitsaggregationsorting.py +35 -33
  45. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/waveform_tools.py +0 -1
  46. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +3 -0
  47. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/zarrextractors.py +9 -2
  48. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/__init__.py +5 -1
  49. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/auto_merge.py +279 -12
  50. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/remove_excess_spikes.py +2 -2
  51. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/remove_redundant.py +2 -2
  52. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/sortingview_curation.py +23 -16
  53. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/train_manual_curation.py +22 -20
  54. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/exporters/report.py +4 -3
  55. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/cellexplorersortingextractor.py +2 -2
  56. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/iblextractors.py +11 -10
  57. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/mdaextractors.py +22 -2
  58. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/intan.py +35 -15
  59. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neo_utils.py +1 -1
  60. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +44 -28
  61. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/openephys.py +1 -1
  62. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/phykilosortextractors.py +1 -1
  63. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/sinapsrecordingextractors.py +3 -3
  64. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/toy_example.py +1 -1
  65. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/__init__.py +3 -1
  66. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/drift_tools.py +4 -1
  67. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/drifting_generator.py +1 -0
  68. spikeinterface-0.102.2/src/spikeinterface/generation/splitting_tools.py +147 -0
  69. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/alignsorting.py +0 -4
  70. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/amplitude_scalings.py +1 -1
  71. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/correlograms.py +9 -7
  72. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/isi.py +6 -4
  73. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/localization_tools.py +10 -8
  74. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/noise_level.py +1 -1
  75. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -1
  76. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/spike_locations.py +0 -2
  77. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/template_metrics.py +6 -6
  78. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/template_similarity.py +7 -5
  79. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/unit_locations.py +1 -1
  80. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/astype.py +2 -2
  81. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/average_across_direction.py +2 -2
  82. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -1
  83. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/clip.py +6 -4
  84. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/common_reference.py +5 -3
  85. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/correct_lsb.py +1 -1
  86. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/decimate.py +3 -3
  87. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +5 -3
  88. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +1 -1
  89. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/deepinterpolation/train.py +1 -1
  90. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/depth_order.py +3 -3
  91. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/detect_bad_channels.py +1 -1
  92. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/directional_derivative.py +2 -2
  93. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/filter.py +6 -6
  94. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/filter_gaussian.py +2 -2
  95. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/filter_opencl.py +1 -1
  96. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +3 -3
  97. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +2 -2
  98. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/motion.py +19 -4
  99. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/normalize_scale.py +6 -6
  100. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/phase_shift.py +3 -3
  101. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/preprocessinglist.py +1 -1
  102. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/rectify.py +2 -2
  103. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/remove_artifacts.py +7 -3
  104. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/resample.py +3 -3
  105. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/silence_periods.py +6 -4
  106. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/unsigned_to_signed.py +4 -2
  107. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/whiten.py +5 -3
  108. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/zero_channel_pad.py +5 -3
  109. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/misc_metrics.py +18 -14
  110. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/pca_metrics.py +2 -2
  111. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +2 -2
  112. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/basesorter.py +10 -2
  113. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/container_tools.py +3 -2
  114. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/combinato.py +2 -3
  115. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/hdsort.py +2 -2
  116. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/herdingspikes.py +6 -5
  117. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/ironclust.py +2 -2
  118. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort.py +2 -2
  119. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort2.py +2 -2
  120. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort2_5.py +2 -2
  121. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort3.py +2 -2
  122. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort4.py +74 -92
  123. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosortbase.py +2 -2
  124. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/klusta.py +11 -12
  125. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/mountainsort4.py +5 -8
  126. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/mountainsort5.py +12 -13
  127. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/pykilosort.py +10 -9
  128. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/spyking_circus.py +11 -10
  129. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/tridesclous.py +8 -18
  130. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/waveclus.py +2 -2
  131. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/waveclus_snippets.py +2 -2
  132. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/yass.py +8 -10
  133. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/internal/simplesorter.py +1 -1
  134. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/internal/spyking_circus2.py +56 -65
  135. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/internal/tridesclous2.py +10 -1
  136. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/runsorter.py +3 -3
  137. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py +1 -0
  138. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/merge.py +5 -1
  139. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/method_list.py +8 -0
  140. spikeinterface-0.102.2/src/spikeinterface/sortingcomponents/clustering/peak_svd.py +137 -0
  141. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +1 -1
  142. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/split.py +2 -2
  143. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/tdc.py +55 -35
  144. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/tdc.py +255 -49
  145. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/__init__.py +1 -0
  146. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/decentralized.py +1 -1
  147. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/dredge.py +1 -1
  148. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +1 -1
  149. spikeinterface-0.102.2/src/spikeinterface/sortingcomponents/motion/medicine.py +102 -0
  150. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +9 -2
  151. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +45 -11
  152. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/peak_detection.py +51 -23
  153. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/peak_localization.py +2 -5
  154. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/tools.py +27 -11
  155. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +170 -24
  156. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/all_amplitudes_distributions.py +4 -3
  157. spikeinterface-0.102.2/src/spikeinterface/widgets/amplitudes.py +149 -0
  158. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/base.py +2 -2
  159. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/crosscorrelograms.py +10 -5
  160. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/metrics.py +4 -3
  161. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/motion.py +27 -58
  162. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/peak_activity.py +84 -14
  163. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/potential_merges.py +1 -1
  164. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/quality_metrics.py +4 -3
  165. spikeinterface-0.102.2/src/spikeinterface/widgets/rasters.py +359 -0
  166. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/sorting_summary.py +9 -5
  167. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/spike_locations.py +4 -3
  168. spikeinterface-0.102.0/src/spikeinterface/widgets/amplitudes.py → spikeinterface-0.102.2/src/spikeinterface/widgets/spike_locations_by_time.py +25 -50
  169. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/spikes_on_traces.py +9 -9
  170. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/template_metrics.py +4 -3
  171. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/template_similarity.py +1 -1
  172. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/traces.py +6 -6
  173. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_depths.py +4 -4
  174. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_locations.py +4 -6
  175. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_probe_map.py +2 -3
  176. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_summary.py +10 -7
  177. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_templates.py +1 -1
  178. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_waveforms.py +32 -18
  179. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_waveforms_density_map.py +4 -4
  180. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/utils.py +20 -4
  181. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/utils_sortingview.py +6 -3
  182. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/widget_list.py +13 -12
  183. {spikeinterface-0.102.0 → spikeinterface-0.102.2/src/spikeinterface.egg-info}/PKG-INFO +14 -15
  184. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface.egg-info/SOURCES.txt +5 -0
  185. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface.egg-info/requires.txt +18 -12
  186. spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_plot_tools.py +0 -305
  187. spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
  188. spikeinterface-0.102.0/src/spikeinterface/widgets/rasters.py +0 -88
  189. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/LICENSE +0 -0
  190. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/README.md +0 -0
  191. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/setup.cfg +0 -0
  192. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/setup.py +0 -0
  193. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/__init__.py +0 -0
  194. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/__init__.py +0 -0
  195. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/benchmark/benchmark_motion_interpolation.py +0 -0
  196. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/__init__.py +0 -0
  197. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/comparisontools.py +0 -0
  198. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/groundtruthstudy.py +0 -0
  199. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/comparison/hybrid.py +0 -0
  200. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/analyzer_extension_core.py +0 -0
  201. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/baseevent.py +0 -0
  202. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/basesnippets.py +0 -0
  203. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/binaryfolder.py +0 -0
  204. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/datasets.py +0 -0
  205. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/globals.py +0 -0
  206. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/job_tools.py +0 -0
  207. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
  208. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/npzfolder.py +0 -0
  209. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/npzsortingextractor.py +0 -0
  210. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/old_api_utils.py +0 -0
  211. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/sortingfolder.py +0 -0
  212. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/template.py +0 -0
  213. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/testing_tools.py +0 -0
  214. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
  215. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
  216. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/curation_format.py +0 -0
  217. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/curation_tools.py +0 -0
  218. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/curationsorting.py +0 -0
  219. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
  220. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/model_based_curation.py +0 -0
  221. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
  222. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/curation/splitunitsorting.py +0 -0
  223. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/exporters/__init__.py +0 -0
  224. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/exporters/to_phy.py +0 -0
  225. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/__init__.py +0 -0
  226. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
  227. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/bids.py +0 -0
  228. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/cbin_ibl.py +0 -0
  229. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
  230. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/extractorlist.py +0 -0
  231. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
  232. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
  233. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/klustaextractors.py +0 -0
  234. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
  235. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/mclustextractors.py +0 -0
  236. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
  237. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/__init__.py +0 -0
  238. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
  239. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
  240. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/biocam.py +0 -0
  241. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/blackrock.py +0 -0
  242. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
  243. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
  244. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
  245. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
  246. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
  247. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
  248. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
  249. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neuronexus.py +0 -0
  250. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
  251. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
  252. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
  253. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/plexon2.py +0 -0
  254. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
  255. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
  256. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/spikeglx.py +0 -0
  257. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
  258. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/neuropixels_utils.py +0 -0
  259. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/nwbextractors.py +0 -0
  260. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/shybridextractors.py +0 -0
  261. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
  262. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/tridesclousextractors.py +0 -0
  263. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
  264. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
  265. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/extractors/yassextractors.py +0 -0
  266. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/full.py +0 -0
  267. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/hybrid_tools.py +0 -0
  268. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/noise_tools.py +0 -0
  269. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/generation/template_database.py +0 -0
  270. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/__init__.py +0 -0
  271. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/postprocessing/principal_component.py +0 -0
  272. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/__init__.py +0 -0
  273. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
  274. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
  275. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
  276. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
  277. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/preprocessing/scale.py +0 -0
  278. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/__init__.py +0 -0
  279. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/quality_metric_list.py +0 -0
  280. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/qualitymetrics/utils.py +0 -0
  281. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/__init__.py +0 -0
  282. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/__init__.py +0 -0
  283. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
  284. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
  285. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
  286. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
  287. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
  288. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
  289. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
  290. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
  291. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
  292. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
  293. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/internal/__init__.py +0 -0
  294. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/internal/si_based.py +0 -0
  295. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/launcher.py +0 -0
  296. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/sorterlist.py +0 -0
  297. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/utils/__init__.py +0 -0
  298. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
  299. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/utils/misc.py +0 -0
  300. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
  301. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
  302. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
  303. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -0
  304. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/circus.py +0 -0
  305. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -0
  306. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/dummy.py +0 -0
  307. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -0
  308. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/main.py +0 -0
  309. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/position.py +0 -0
  310. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +0 -0
  311. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +0 -0
  312. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/random_projections.py +0 -0
  313. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +0 -0
  314. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +0 -0
  315. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/tools.py +0 -0
  316. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -0
  317. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/features_from_peaks.py +0 -0
  318. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
  319. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/base.py +0 -0
  320. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/circus.py +0 -0
  321. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/main.py +0 -0
  322. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/method_list.py +0 -0
  323. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/naive.py +0 -0
  324. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/matching/wobble.py +0 -0
  325. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
  326. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -0
  327. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/peak_pipeline.py +0 -0
  328. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
  329. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
  330. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +0 -0
  331. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
  332. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
  333. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
  334. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
  335. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/__init__.py +0 -0
  336. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/autocorrelograms.py +0 -0
  337. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/collision.py +0 -0
  338. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/comparison.py +0 -0
  339. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/gtstudy.py +0 -0
  340. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/isi_distribution.py +0 -0
  341. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/multicomparison.py +0 -0
  342. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
  343. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/probe_map.py +0 -0
  344. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/unit_presence.py +0 -0
  345. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/utils_ipywidgets.py +0 -0
  346. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
  347. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
  348. {spikeinterface-0.102.0 → spikeinterface-0.102.2}/src/spikeinterface.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: spikeinterface
3
- Version: 0.102.0
3
+ Version: 0.102.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,10 +14,11 @@ 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.13,>=3.9
17
+ Requires-Python: <3.14,>=3.9
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: numpy>=1.20
20
+ Requires-Dist: numpy>=1.20; python_version < "3.13"
21
+ Requires-Dist: numpy>=2.0.0; python_version >= "3.13"
21
22
  Requires-Dist: threadpoolctl>=3.0.0
22
23
  Requires-Dist: tqdm
23
24
  Requires-Dist: zarr<3,>=2.18
@@ -32,13 +33,11 @@ Requires-Dist: pyedflib<0.1.39,>=0.1.30; extra == "extractors"
32
33
  Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
33
34
  Requires-Dist: lxml; extra == "extractors"
34
35
  Requires-Dist: scipy; extra == "extractors"
35
- Requires-Dist: ONE-api>=2.7.0; extra == "extractors"
36
- Requires-Dist: ibllib>=2.36.0; extra == "extractors"
36
+ Requires-Dist: ibllib; extra == "extractors"
37
37
  Requires-Dist: pymatreader>=0.0.32; extra == "extractors"
38
38
  Requires-Dist: zugbruecke>=0.2; sys_platform != "win32" and extra == "extractors"
39
39
  Provides-Extra: streaming-extractors
40
- Requires-Dist: ONE-api<2.10.0,>=2.7.0; extra == "streaming-extractors"
41
- Requires-Dist: ibllib>=2.36.0; extra == "streaming-extractors"
40
+ Requires-Dist: ibllib; extra == "streaming-extractors"
42
41
  Requires-Dist: pynwb>=2.6.0; extra == "streaming-extractors"
43
42
  Requires-Dist: fsspec; extra == "streaming-extractors"
44
43
  Requires-Dist: aiohttp; extra == "streaming-extractors"
@@ -78,22 +77,21 @@ Provides-Extra: test-extractors
78
77
  Requires-Dist: pooch>=1.8.2; extra == "test-extractors"
79
78
  Requires-Dist: datalad>=1.0.2; extra == "test-extractors"
80
79
  Provides-Extra: test-preprocessing
81
- Requires-Dist: ibllib>=2.36.0; extra == "test-preprocessing"
80
+ Requires-Dist: ibllib; extra == "test-preprocessing"
82
81
  Requires-Dist: torch; extra == "test-preprocessing"
83
82
  Provides-Extra: test
84
83
  Requires-Dist: pytest; extra == "test"
85
84
  Requires-Dist: pytest-dependency; extra == "test"
86
85
  Requires-Dist: pytest-cov; extra == "test"
86
+ Requires-Dist: psutil; extra == "test"
87
87
  Requires-Dist: huggingface_hub; extra == "test"
88
- Requires-Dist: ibllib>=2.36.0; extra == "test"
88
+ Requires-Dist: ibllib; extra == "test"
89
89
  Requires-Dist: s3fs; extra == "test"
90
- Requires-Dist: numba; extra == "test"
90
+ Requires-Dist: numba<0.61.0; python_version < "3.13" and extra == "test"
91
+ Requires-Dist: numba>=0.61.0; python_version >= "3.13" and extra == "test"
91
92
  Requires-Dist: hdbscan>=0.8.33; extra == "test"
92
- Requires-Dist: sortingview; extra == "test"
93
- Requires-Dist: tridesclous>=1.6.8; extra == "test"
94
- Requires-Dist: pymde; extra == "test"
93
+ Requires-Dist: sortingview>=0.12.0; extra == "test"
95
94
  Requires-Dist: torch; extra == "test"
96
- Requires-Dist: pynndescent; extra == "test"
97
95
  Requires-Dist: skops; extra == "test"
98
96
  Requires-Dist: huggingface_hub; extra == "test"
99
97
  Provides-Extra: docs
@@ -119,6 +117,7 @@ Requires-Dist: spikeinterface[test_core]; extra == "dev"
119
117
  Requires-Dist: spikeinterface[docs]; extra == "dev"
120
118
  Requires-Dist: black; extra == "dev"
121
119
  Requires-Dist: pre-commit; extra == "dev"
120
+ Dynamic: license-file
122
121
 
123
122
  # SpikeInterface: a unified framework for spike sorting
124
123
 
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "spikeinterface"
3
- version = "0.102.0"
3
+ version = "0.102.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.13"
10
+ requires-python = ">=3.9,<3.14"
11
11
  classifiers = [
12
12
  "Programming Language :: Python :: 3 :: Only",
13
13
  "License :: OSI Approved :: MIT License",
@@ -20,7 +20,8 @@ classifiers = [
20
20
 
21
21
 
22
22
  dependencies = [
23
- "numpy>=1.20",
23
+ "numpy>=1.20;python_version<'3.13'",
24
+ "numpy>=2.0.0;python_version>='3.13'",
24
25
  "threadpoolctl>=3.0.0",
25
26
  "tqdm",
26
27
  "zarr>=2.18,<3",
@@ -30,7 +31,7 @@ dependencies = [
30
31
  ]
31
32
 
32
33
  [build-system]
33
- requires = ["setuptools>=62.0"]
34
+ requires = ["setuptools>=78.0.2"]
34
35
  build-backend = "setuptools.build_meta"
35
36
 
36
37
  [tool.setuptools]
@@ -66,15 +67,13 @@ extractors = [
66
67
  "sonpy;python_version<'3.10'",
67
68
  "lxml", # lxml for neuroscope
68
69
  "scipy",
69
- "ONE-api>=2.7.0", # alf sorter and streaming IBL
70
- "ibllib>=2.36.0", # streaming IBL
70
+ "ibllib", # streaming IBL
71
71
  "pymatreader>=0.0.32", # For cell explorer matlab files
72
72
  "zugbruecke>=0.2; sys_platform!='win32'", # For plexon2
73
73
  ]
74
74
 
75
75
  streaming_extractors = [
76
- "ONE-api>=2.7.0,<2.10.0", # alf sorter and streaming IBL
77
- "ibllib>=2.36.0", # streaming IBL
76
+ "ibllib", # streaming IBL
78
77
  # Following dependencies are for streaming with nwb files
79
78
  "pynwb>=2.6.0",
80
79
  "fsspec",
@@ -134,12 +133,13 @@ test_extractors = [
134
133
  # Functions to download data in neo test suite
135
134
  "pooch>=1.8.2",
136
135
  "datalad>=1.0.2",
136
+ # Commenting out for release
137
137
  # "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
138
138
  # "neo @ git+https://github.com/NeuralEnsemble/python-neo.git",
139
139
  ]
140
140
 
141
141
  test_preprocessing = [
142
- "ibllib>=2.36.0", # for IBL
142
+ "ibllib", # for IBL
143
143
  "torch",
144
144
  ]
145
145
 
@@ -148,30 +148,26 @@ test = [
148
148
  "pytest",
149
149
  "pytest-dependency",
150
150
  "pytest-cov",
151
+ "psutil",
151
152
 
152
153
  "huggingface_hub",
153
154
 
154
155
  # preprocessing
155
- "ibllib>=2.36.0", # for IBL
156
+ "ibllib", # for IBL
156
157
 
157
158
  # streaming templates
158
159
  "s3fs",
159
160
 
160
161
  # tridesclous
161
- "numba",
162
+ "numba<0.61.0;python_version<'3.13'",
163
+ "numba>=0.61.0;python_version>='3.13'",
162
164
  "hdbscan>=0.8.33", # Previous version had a broken wheel
163
165
 
164
166
  # for sortingview backend
165
- "sortingview",
166
-
167
-
168
- ## install tridesclous for testing ##
169
- "tridesclous>=1.6.8",
167
+ "sortingview>=0.12.0",
170
168
 
171
- ## sliding_nn
172
- "pymde",
169
+ # for motion and sortingcomponents
173
170
  "torch",
174
- "pynndescent",
175
171
 
176
172
  # curation
177
173
  "skops",
@@ -207,7 +203,6 @@ docs = [
207
203
  # for release we need pypi, so this needs to be commented
208
204
  # "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git", # We always build from the latest version
209
205
  # "neo @ git+https://github.com/NeuralEnsemble/python-neo.git", # We always build from the latest version
210
-
211
206
  ]
212
207
 
213
208
  dev = [
@@ -10,7 +10,7 @@ import time
10
10
 
11
11
 
12
12
  from spikeinterface.core import SortingAnalyzer
13
-
13
+ from spikeinterface.core.job_tools import fix_job_kwargs, split_job_kwargs
14
14
  from spikeinterface import load, create_sorting_analyzer, load_sorting_analyzer
15
15
  from spikeinterface.widgets import get_some_colors
16
16
 
@@ -43,11 +43,37 @@ class BenchmarkStudy:
43
43
  self.analyzers = {}
44
44
  self.cases = {}
45
45
  self.benchmarks = {}
46
+ self.levels = None
47
+ self.colors_by_case = None
48
+ self.colors_by_levels = {}
46
49
  self.scan_folder()
47
- self.colors = None
48
50
 
49
51
  @classmethod
50
52
  def create(cls, study_folder, datasets={}, cases={}, levels=None):
53
+ """
54
+ Create a BenchmarkStudy from a dict of datasets and cases.
55
+
56
+ Parameters
57
+ ----------
58
+ study_folder : str | Path
59
+ The folder where the study will be saved.
60
+ datasets : dict
61
+ A dict of datasets. The keys are the dataset names and the values are `SortingAnalyzer` objects.
62
+ Values can also be tuples with (recording, gt_sorting), but this is deprecated.
63
+ cases : dict
64
+ A dict of cases. The keys are the cases (str, or tuples) and the values are dictionaries containing:
65
+
66
+ * dataset
67
+ * label
68
+ * params
69
+ levels : list | None
70
+ If the keys of the cases are tuples, this is the list of levels names.
71
+
72
+ Returns
73
+ -------
74
+ study : BenchmarkStudy
75
+ The created study.
76
+ """
51
77
  # check that cases keys are homogeneous
52
78
  key0 = list(cases.keys())[0]
53
79
  if isinstance(key0, str):
@@ -132,6 +158,9 @@ class BenchmarkStudy:
132
158
  return cls(study_folder)
133
159
 
134
160
  def create_benchmark(self, key):
161
+ """
162
+ Create a benchmark for a given key.
163
+ """
135
164
  raise NotImplementedError
136
165
 
137
166
  def scan_folder(self):
@@ -167,7 +196,7 @@ class BenchmarkStudy:
167
196
  result_folder = self.folder / "results" / self.key_to_str(key)
168
197
  if result_folder.exists():
169
198
  result = self.benchmark_class.load_folder(result_folder)
170
- benchmark = self.create_benchmark(key)
199
+ benchmark = self.create_benchmark(key=key)
171
200
  benchmark.result.update(result)
172
201
  self.benchmarks[key] = benchmark
173
202
  else:
@@ -219,7 +248,7 @@ class BenchmarkStudy:
219
248
  for key in job_keys:
220
249
  benchmark = self.create_benchmark(key)
221
250
  t0 = time.perf_counter()
222
- benchmark.run()
251
+ benchmark.run(**job_kwargs)
223
252
  t1 = time.perf_counter()
224
253
  self.benchmarks[key] = benchmark
225
254
  bench_folder = self.folder / "results" / self.key_to_str(key)
@@ -228,19 +257,49 @@ class BenchmarkStudy:
228
257
  benchmark.result["run_time"] = float(t1 - t0)
229
258
  benchmark.save_main(bench_folder)
230
259
 
231
- def set_colors(self, colors=None, map_name="tab20"):
260
+ def set_colors(self, colors=None, map_name="tab10", levels_to_group_by=None):
261
+ """
262
+ Set colors for the study cases or for a given levels_to_group_by.
263
+
264
+ Parmeters
265
+ ---------
266
+ colors : dict | None, default: None
267
+ A user-defined dictionary with the case keys as keys and the colors as values.
268
+ Note that the case keys depend on the levels_to_group_by.
269
+ map_name : str, default: 'tab10'
270
+ The name of the colormap to use.
271
+ levels_to_group_by : list | None, default: None
272
+ The levels to group by. If None, the colors are set for the cases.
273
+ """
274
+ case_keys, _ = self.get_grouped_keys_mapping(levels_to_group_by)
275
+
232
276
  if colors is None:
233
- case_keys = list(self.cases.keys())
234
- self.colors = get_some_colors(
235
- case_keys, map_name=map_name, color_engine="matplotlib", shuffle=False, margin=0
277
+ colors = get_some_colors(
278
+ case_keys, map_name=map_name, color_engine="matplotlib", shuffle=False, margin=0, resample=False
236
279
  )
280
+ if levels_to_group_by is None:
281
+ self.colors_by_case = colors
282
+ else:
283
+ level_key = tuple(levels_to_group_by) if len(levels_to_group_by) > 1 else levels_to_group_by[0]
284
+ self.colors_by_levels[level_key] = colors
237
285
  else:
238
- self.colors = colors
239
-
240
- def get_colors(self):
241
- if self.colors is None:
242
- self.set_colors()
243
- return self.colors
286
+ assert all([key in colors for key in case_keys]), f"You must provide colors for all cases keys: {case_keys}"
287
+ if levels_to_group_by is None:
288
+ self.colors_by_case = colors
289
+ else:
290
+ level_key = tuple(levels_to_group_by) if len(levels_to_group_by) > 1 else levels_to_group_by[0]
291
+ self.colors_by_levels[level_key] = colors
292
+
293
+ def get_colors(self, levels_to_group_by=None):
294
+ if levels_to_group_by is None:
295
+ if self.colors_by_case is None:
296
+ self.set_colors()
297
+ return self.colors_by_case
298
+ else:
299
+ level_key = tuple(levels_to_group_by) if len(levels_to_group_by) > 1 else levels_to_group_by[0]
300
+ if level_key not in self.colors_by_levels:
301
+ self.set_colors(levels_to_group_by=levels_to_group_by)
302
+ return self.colors_by_levels[level_key]
244
303
 
245
304
  def get_run_times(self, case_keys=None):
246
305
  if case_keys is None:
@@ -258,12 +317,60 @@ class BenchmarkStudy:
258
317
  df.index.names = self.levels
259
318
  return df
260
319
 
261
- def plot_run_times(self, case_keys=None):
320
+ def get_grouped_keys_mapping(self, levels_to_group_by=None):
321
+ """
322
+ Return a dictionary of grouped keys.
323
+
324
+ Parameters
325
+ ----------
326
+ levels_to_group_by : list
327
+ A list of levels to group by.
328
+
329
+ Returns
330
+ -------
331
+ grouped_keys : dict
332
+ A dictionary of grouped keys, with the new keys as keys and the list of cases
333
+ associated to new keys as values.
334
+ labels : dict
335
+ A dictionary of labels, with the new keys as keys and the labels as values.
336
+ """
337
+ cases = list(self.cases.keys())
338
+ if levels_to_group_by is None or self.levels is None:
339
+ keys_mapping = {key: [key] for key in cases}
340
+ elif len(self.levels) == 1:
341
+ keys_mapping = {key: [key] for key in cases}
342
+ else:
343
+ study_levels = self.levels
344
+ assert np.all(
345
+ [l in study_levels for l in levels_to_group_by]
346
+ ), f"levels_to_group_by must be in {study_levels}, got {levels_to_group_by}"
347
+ keys_mapping = {}
348
+ for key in cases:
349
+ new_key = tuple(key[list(study_levels).index(level)] for level in levels_to_group_by)
350
+ if len(new_key) == 1:
351
+ new_key = new_key[0]
352
+ if new_key not in keys_mapping:
353
+ keys_mapping[new_key] = []
354
+ keys_mapping[new_key].append(key)
355
+
356
+ if levels_to_group_by is None:
357
+ labels = {key: self.cases[key]["label"] for key in cases}
358
+ else:
359
+ key0 = list(keys_mapping.keys())[0]
360
+ if isinstance(key0, tuple):
361
+ labels = {key: "-".join(key) for key in keys_mapping}
362
+ else:
363
+ labels = {key: key for key in keys_mapping}
364
+
365
+ return keys_mapping, labels
366
+
367
+ def plot_run_times(self, case_keys=None, **kwargs):
262
368
  from .benchmark_plot_tools import plot_run_times
263
369
 
264
- return plot_run_times(self, case_keys=case_keys)
370
+ return plot_run_times(self, case_keys=case_keys, **kwargs)
265
371
 
266
372
  def compute_results(self, case_keys=None, verbose=False, **result_params):
373
+
267
374
  if case_keys is None:
268
375
  case_keys = list(self.cases.keys())
269
376
 
@@ -304,12 +411,32 @@ class BenchmarkStudy:
304
411
  # sorting_analyzer = load_sorting_analyzer(folder)
305
412
  # return sorting_analyzer
306
413
 
414
+ def compute_analyzer_extension(self, extensions, dataset_keys=None, **extension_kwargs):
415
+ if dataset_keys is None:
416
+ dataset_keys = list(self.datasets.keys())
417
+ if not isinstance(dataset_keys, list):
418
+ dataset_keys = [dataset_keys]
419
+ for dataset_key in dataset_keys:
420
+ sorting_analyzer = self.get_sorting_analyzer(dataset_key=dataset_key)
421
+ sorting_analyzer.compute(extensions, **extension_kwargs)
422
+
423
+ def get_gt_unit_locations(self, case_key):
424
+ dataset_key = self.cases[case_key]["dataset"]
425
+ sorting_analyzer = self.get_sorting_analyzer(dataset_key=dataset_key)
426
+ if "gt_unit_locations" in sorting_analyzer.sorting.get_property_keys():
427
+ return sorting_analyzer.get_sorting_property("gt_unit_locations")
428
+ else:
429
+ if not sorting_analyzer.has_extension("unit_locations"):
430
+ self.compute_analyzer_extension(["unit_locations"], dataset_keys=dataset_key)
431
+ unit_locations_ext = sorting_analyzer.get_extension("unit_locations")
432
+ return unit_locations_ext.get_data()
433
+
307
434
  def get_templates(self, key, operator="average"):
308
435
  sorting_analyzer = self.get_sorting_analyzer(case_key=key)
309
436
  templates = sorting_analyzer.get_extenson("templates").get_data(operator=operator)
310
437
  return templates
311
438
 
312
- def compute_metrics(self, case_keys=None, metric_names=["snr", "firing_rate"], force=False):
439
+ def compute_metrics(self, case_keys=None, metric_names=["snr", "firing_rate"], force=False, **job_kwargs):
313
440
  if case_keys is None:
314
441
  case_keys = self.cases.keys()
315
442
 
@@ -329,17 +456,13 @@ class BenchmarkStudy:
329
456
  sorting_analyzer = self.get_sorting_analyzer(key)
330
457
  qm_ext = sorting_analyzer.get_extension("quality_metrics")
331
458
  if qm_ext is None or force:
332
- qm_ext = sorting_analyzer.compute("quality_metrics", metric_names=metric_names)
459
+ qm_ext = sorting_analyzer.compute("quality_metrics", metric_names=metric_names, **job_kwargs)
333
460
 
334
461
  # TODO remove this metics CSV file!!!!
335
462
  metrics = qm_ext.get_data()
336
463
  # metrics.to_csv(filename, sep="\t", index=True)
337
464
 
338
465
  def get_metrics(self, key):
339
- import pandas as pd
340
-
341
- dataset_key = self.cases[key]["dataset"]
342
-
343
466
  analyzer = self.get_sorting_analyzer(key)
344
467
  ext = analyzer.get_extension("quality_metrics")
345
468
  if ext is None:
@@ -347,16 +470,32 @@ class BenchmarkStudy:
347
470
  return None
348
471
 
349
472
  metrics = ext.get_data()
473
+ # add GT unit id column
474
+ gt_unit_ids = analyzer.sorting.unit_ids
475
+ metrics.loc[:, "gt_unit_id"] = gt_unit_ids
350
476
  return metrics
351
477
 
352
- # filename = self.folder / "metrics" / f"{self.key_to_str(dataset_key)}.csv"
353
- # if not filename.exists():
354
- # return
355
- # metrics = pd.read_csv(filename, sep="\t", index_col=0)
356
- # dataset_key = self.cases[key]["dataset"]
357
- # recording, gt_sorting = self.datasets[dataset_key]
358
- # metrics.index = gt_sorting.unit_ids
359
- # return metrics
478
+ def get_all_metrics(self, case_keys=None):
479
+ """
480
+ Return a DataFrame with concatented metrics for multiple cases.
481
+ """
482
+ import pandas as pd
483
+
484
+ if case_keys is None:
485
+ case_keys = list(self.cases.keys())
486
+ assert all(key in self.cases for key in case_keys), "Some case keys are not in cases"
487
+ metrics = []
488
+ indices = []
489
+ for key in case_keys:
490
+ metrics.append(self.get_metrics(key))
491
+ indices.extend([key] * len(metrics[-1]))
492
+ if isinstance(case_keys[0], str):
493
+ index = pd.Index(indices, name=self.levels)
494
+ else:
495
+ index = pd.MultiIndex.from_tuples(indices, names=self.levels)
496
+ metrics = pd.concat(metrics)
497
+ metrics.index = index
498
+ return metrics
360
499
 
361
500
  def get_units_snr(self, key):
362
501
  """ """
@@ -365,6 +504,39 @@ class BenchmarkStudy:
365
504
  def get_result(self, key):
366
505
  return self.benchmarks[key].result
367
506
 
507
+ def get_pairs_by_level(self, level):
508
+ """
509
+ usefull for function like plot_performance_losses() where you need to plot one pair of results
510
+ This generate list of pairs for a given level.
511
+ """
512
+
513
+ level_index = self.levels.index(level)
514
+
515
+ possible_values = []
516
+ for key in self.cases.keys():
517
+ assert isinstance(key, tuple), "get_pairs_by_level need tuple keys"
518
+ level_value = key[level_index]
519
+ if level_value not in possible_values:
520
+ possible_values.append(level_value)
521
+ assert len(possible_values) == 2, "get_pairs_by_level() : you need exactly 2 value for this levels"
522
+
523
+ pairs = []
524
+ for key in self.cases.keys():
525
+
526
+ case0 = list(key)
527
+ case1 = list(key)
528
+ case0[level_index] = possible_values[0]
529
+ case1[level_index] = possible_values[1]
530
+ case0 = tuple(case0)
531
+ case1 = tuple(case1)
532
+
533
+ pair = (case0, case1)
534
+
535
+ if pair not in pairs:
536
+ pairs.append(pair)
537
+
538
+ return pairs
539
+
368
540
 
369
541
  class Benchmark:
370
542
  """