spikeinterface 0.101.2__tar.gz → 0.102.0__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 (349) hide show
  1. {spikeinterface-0.101.2/src/spikeinterface.egg-info → spikeinterface-0.102.0}/PKG-INFO +16 -10
  2. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/pyproject.toml +17 -9
  3. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/__init__.py +1 -4
  4. spikeinterface-0.102.0/src/spikeinterface/benchmark/__init__.py +7 -0
  5. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/benchmark/benchmark_tools.py → spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_base.py +11 -33
  6. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_clustering.py +11 -40
  7. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_matching.py +14 -99
  8. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_motion_estimation.py +17 -3
  9. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_motion_interpolation.py +1 -1
  10. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_detection.py +1 -2
  11. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_localization.py +1 -1
  12. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents → spikeinterface-0.102.0/src/spikeinterface}/benchmark/benchmark_peak_selection.py +1 -7
  13. spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_plot_tools.py +305 -0
  14. spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_sorter.py +144 -0
  15. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/__init__.py +2 -2
  16. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/collision.py +74 -70
  17. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/comparisontools.py +480 -8
  18. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/correlogram.py +48 -45
  19. spikeinterface-0.102.0/src/spikeinterface/comparison/groundtruthstudy.py +21 -0
  20. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/multicomparisons.py +2 -2
  21. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/paircomparisons.py +82 -54
  22. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/__init__.py +10 -2
  23. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/analyzer_extension_core.py +61 -32
  24. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/base.py +9 -103
  25. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baserecording.py +87 -19
  26. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baserecordingsnippets.py +4 -2
  27. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/basesorting.py +1 -1
  28. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/core_tools.py +1 -2
  29. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/generate.py +8 -5
  30. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/globals.py +3 -1
  31. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/job_tools.py +287 -84
  32. spikeinterface-0.102.0/src/spikeinterface/core/loading.py +302 -0
  33. spikeinterface-0.102.0/src/spikeinterface/core/motion.py +303 -0
  34. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/node_pipeline.py +236 -93
  35. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/recording_tools.py +182 -55
  36. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sorting_tools.py +0 -1
  37. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sortinganalyzer.py +28 -36
  38. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sortingfolder.py +1 -1
  39. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/template.py +2 -0
  40. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/template_tools.py +6 -1
  41. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/waveform_tools.py +82 -103
  42. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +7 -7
  43. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/zarrextractors.py +69 -11
  44. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/__init__.py +5 -1
  45. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/auto_merge.py +373 -177
  46. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curation_format.py +24 -16
  47. spikeinterface-0.102.0/src/spikeinterface/curation/model_based_curation.py +435 -0
  48. spikeinterface-0.102.0/src/spikeinterface/curation/train_manual_curation.py +843 -0
  49. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/report.py +4 -4
  50. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/cbin_ibl.py +22 -10
  51. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/extractorlist.py +9 -1
  52. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mdaextractors.py +4 -0
  53. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/__init__.py +2 -0
  54. spikeinterface-0.102.0/src/spikeinterface/extractors/neoextractors/neuronexus.py +66 -0
  55. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/openephys.py +1 -0
  56. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/plexon2.py +25 -3
  57. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neuropixels_utils.py +28 -21
  58. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/nwbextractors.py +384 -2
  59. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/full.py +1 -0
  60. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/hybrid_tools.py +1 -1
  61. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/correlograms.py +93 -3
  62. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/localization_tools.py +63 -10
  63. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/principal_component.py +13 -13
  64. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/template_metrics.py +84 -46
  65. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/template_similarity.py +152 -50
  66. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/unit_locations.py +2 -2
  67. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/average_across_direction.py +3 -0
  68. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/decimate.py +14 -13
  69. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/motion.py +1 -1
  70. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/silence_periods.py +5 -2
  71. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/whiten.py +83 -39
  72. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/__init__.py +1 -1
  73. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/misc_metrics.py +17 -16
  74. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/pca_metrics.py +35 -17
  75. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +47 -14
  76. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/quality_metric_list.py +41 -2
  77. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/basesorter.py +7 -6
  78. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort.py +1 -1
  79. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort4.py +2 -2
  80. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosortbase.py +1 -1
  81. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/si_based.py +2 -2
  82. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/spyking_circus2.py +102 -62
  83. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/tridesclous2.py +2 -1
  84. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/launcher.py +2 -2
  85. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/runsorter.py +5 -5
  86. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/circus.py +85 -45
  87. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -2
  88. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py +11 -15
  89. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/dummy.py +1 -1
  90. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/main.py +1 -1
  91. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/merge.py +6 -6
  92. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/method_list.py +3 -2
  93. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position.py +2 -3
  94. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +6 -15
  95. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +4 -7
  96. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +2 -3
  97. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/random_projections.py +36 -23
  98. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +7 -8
  99. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +6 -7
  100. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/split.py +83 -45
  101. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/tdc.py +2 -12
  102. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/tools.py +0 -4
  103. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/base.py +48 -0
  104. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/circus.py +761 -0
  105. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/main.py +62 -0
  106. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/method_list.py +8 -0
  107. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/naive.py +74 -0
  108. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/matching/tdc.py +696 -0
  109. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/wobble.py +147 -135
  110. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -1
  111. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/decentralized.py +2 -2
  112. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/dredge.py +6 -7
  113. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +2 -1
  114. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +1 -2
  115. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +49 -21
  116. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -231
  117. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_detection.py +69 -80
  118. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_localization.py +4 -4
  119. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/tools.py +319 -0
  120. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
  121. spikeinterface-0.102.0/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +50 -0
  122. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/autocorrelograms.py +7 -1
  123. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/crosscorrelograms.py +2 -1
  124. spikeinterface-0.102.0/src/spikeinterface/widgets/gtstudy.py +206 -0
  125. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/motion.py +1 -1
  126. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/sorting_summary.py +57 -13
  127. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/traces.py +5 -2
  128. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_summary.py +55 -47
  129. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_waveforms.py +1 -1
  130. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils.py +90 -0
  131. spikeinterface-0.102.0/src/spikeinterface/widgets/utils_sortingview.py +106 -0
  132. {spikeinterface-0.101.2 → spikeinterface-0.102.0/src/spikeinterface.egg-info}/PKG-INFO +16 -10
  133. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/SOURCES.txt +19 -9
  134. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/requires.txt +12 -7
  135. spikeinterface-0.101.2/src/spikeinterface/comparison/groundtruthstudy.py +0 -441
  136. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/benchmark/__init__.py +0 -6
  137. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/circus.py +0 -811
  138. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/main.py +0 -158
  139. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/naive.py +0 -121
  140. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/matching/tdc.py +0 -390
  141. spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/tools.py +0 -153
  142. spikeinterface-0.101.2/src/spikeinterface/widgets/gtstudy.py +0 -344
  143. spikeinterface-0.101.2/src/spikeinterface/widgets/utils_sortingview.py +0 -154
  144. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/LICENSE +0 -0
  145. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/README.md +0 -0
  146. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/setup.cfg +0 -0
  147. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/setup.py +0 -0
  148. /spikeinterface-0.101.2/src/spikeinterface/sorters/external/__init__.py → /spikeinterface-0.102.0/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
  149. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/basecomparison.py +0 -0
  150. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/comparison/hybrid.py +0 -0
  151. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/baseevent.py +0 -0
  152. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/basesnippets.py +0 -0
  153. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/binaryfolder.py +0 -0
  154. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/binaryrecordingextractor.py +0 -0
  155. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/channelsaggregationrecording.py +0 -0
  156. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/channelslice.py +0 -0
  157. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/datasets.py +0 -0
  158. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/frameslicerecording.py +0 -0
  159. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/frameslicesorting.py +0 -0
  160. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
  161. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
  162. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npzfolder.py +0 -0
  163. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/npzsortingextractor.py +0 -0
  164. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/numpyextractors.py +0 -0
  165. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/old_api_utils.py +0 -0
  166. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/segmentutils.py +0 -0
  167. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/snippets_tools.py +0 -0
  168. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/sparsity.py +0 -0
  169. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/testing.py +0 -0
  170. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/testing_tools.py +0 -0
  171. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
  172. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
  173. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
  174. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curation_tools.py +0 -0
  175. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/curationsorting.py +0 -0
  176. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
  177. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
  178. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
  179. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/remove_redundant.py +0 -0
  180. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/sortingview_curation.py +0 -0
  181. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/curation/splitunitsorting.py +0 -0
  182. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/__init__.py +0 -0
  183. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/exporters/to_phy.py +0 -0
  184. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/__init__.py +0 -0
  185. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
  186. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/bids.py +0 -0
  187. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
  188. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
  189. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
  190. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
  191. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/iblextractors.py +0 -0
  192. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/klustaextractors.py +0 -0
  193. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
  194. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mclustextractors.py +0 -0
  195. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
  196. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
  197. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
  198. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/biocam.py +0 -0
  199. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/blackrock.py +0 -0
  200. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
  201. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
  202. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
  203. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
  204. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
  205. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
  206. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
  207. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +0 -0
  208. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
  209. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
  210. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
  211. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
  212. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
  213. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
  214. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
  215. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/spikeglx.py +0 -0
  216. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
  217. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/phykilosortextractors.py +0 -0
  218. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/shybridextractors.py +0 -0
  219. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
  220. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
  221. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/toy_example.py +0 -0
  222. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/tridesclousextractors.py +0 -0
  223. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
  224. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
  225. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/extractors/yassextractors.py +0 -0
  226. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/__init__.py +0 -0
  227. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/drift_tools.py +0 -0
  228. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/drifting_generator.py +0 -0
  229. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/noise_tools.py +0 -0
  230. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/generation/template_database.py +0 -0
  231. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/__init__.py +0 -0
  232. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
  233. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
  234. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/isi.py +0 -0
  235. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/noise_level.py +0 -0
  236. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -0
  237. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/postprocessing/spike_locations.py +0 -0
  238. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/__init__.py +0 -0
  239. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
  240. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/astype.py +0 -0
  241. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
  242. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/clip.py +0 -0
  243. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/common_reference.py +0 -0
  244. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
  245. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
  246. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
  247. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
  248. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
  249. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
  250. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/depth_order.py +0 -0
  251. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/detect_bad_channels.py +0 -0
  252. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
  253. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter.py +0 -0
  254. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
  255. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
  256. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
  257. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
  258. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
  259. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
  260. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
  261. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/preprocessinglist.py +0 -0
  262. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/rectify.py +0 -0
  263. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
  264. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/resample.py +0 -0
  265. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/scale.py +0 -0
  266. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
  267. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
  268. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/qualitymetrics/utils.py +0 -0
  269. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/__init__.py +0 -0
  270. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/container_tools.py +0 -0
  271. {spikeinterface-0.101.2/src/spikeinterface/sorters/internal → spikeinterface-0.102.0/src/spikeinterface/sorters/external}/__init__.py +0 -0
  272. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/combinato.py +0 -0
  273. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/hdsort.py +0 -0
  274. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
  275. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
  276. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/ironclust.py +0 -0
  277. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
  278. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
  279. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
  280. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
  281. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
  282. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
  283. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
  284. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/klusta.py +0 -0
  285. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
  286. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
  287. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
  288. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/pykilosort.py +0 -0
  289. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
  290. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
  291. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
  292. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus.py +0 -0
  293. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
  294. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
  295. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
  296. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/yass.py +0 -0
  297. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
  298. {spikeinterface-0.101.2/src/spikeinterface/sortingcomponents/waveforms → spikeinterface-0.102.0/src/spikeinterface/sorters/internal}/__init__.py +0 -0
  299. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/internal/simplesorter.py +0 -0
  300. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/sorterlist.py +0 -0
  301. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/__init__.py +0 -0
  302. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
  303. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/misc.py +0 -0
  304. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
  305. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
  306. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
  307. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -0
  308. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -0
  309. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -0
  310. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/features_from_peaks.py +0 -0
  311. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
  312. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
  313. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_pipeline.py +0 -0
  314. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
  315. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
  316. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
  317. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +0 -0
  318. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
  319. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
  320. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/__init__.py +0 -0
  321. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
  322. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/amplitudes.py +0 -0
  323. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/base.py +0 -0
  324. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/collision.py +0 -0
  325. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/comparison.py +0 -0
  326. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/isi_distribution.py +0 -0
  327. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/metrics.py +0 -0
  328. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/multicomparison.py +0 -0
  329. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/peak_activity.py +0 -0
  330. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
  331. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/potential_merges.py +0 -0
  332. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/probe_map.py +0 -0
  333. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/quality_metrics.py +0 -0
  334. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/rasters.py +0 -0
  335. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/spike_locations.py +0 -0
  336. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
  337. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/template_metrics.py +0 -0
  338. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/template_similarity.py +0 -0
  339. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_depths.py +0 -0
  340. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_locations.py +0 -0
  341. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_presence.py +0 -0
  342. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
  343. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_templates.py +0 -0
  344. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
  345. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils_ipywidgets.py +0 -0
  346. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
  347. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface/widgets/widget_list.py +0 -0
  348. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
  349. {spikeinterface-0.101.2 → spikeinterface-0.102.0}/src/spikeinterface.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: spikeinterface
3
- Version: 0.101.2
3
+ Version: 0.102.0
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,21 +14,21 @@ 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: <4.0,>=3.9
17
+ Requires-Python: <3.13,>=3.9
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: numpy<2.0,>=1.20
20
+ Requires-Dist: numpy>=1.20
21
21
  Requires-Dist: threadpoolctl>=3.0.0
22
22
  Requires-Dist: tqdm
23
- Requires-Dist: zarr<2.18,>=2.16
24
- Requires-Dist: neo>=0.13.0
23
+ Requires-Dist: zarr<3,>=2.18
24
+ Requires-Dist: neo>=0.14.0
25
25
  Requires-Dist: probeinterface>=0.2.23
26
26
  Requires-Dist: packaging
27
27
  Provides-Extra: extractors
28
28
  Requires-Dist: MEArec>=1.8; extra == "extractors"
29
29
  Requires-Dist: pynwb>=2.6.0; extra == "extractors"
30
- Requires-Dist: hdmf-zarr>=0.5.0; extra == "extractors"
31
- Requires-Dist: pyedflib>=0.1.30; extra == "extractors"
30
+ Requires-Dist: hdmf-zarr>=0.11.0; extra == "extractors"
31
+ Requires-Dist: pyedflib<0.1.39,>=0.1.30; extra == "extractors"
32
32
  Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
33
33
  Requires-Dist: lxml; extra == "extractors"
34
34
  Requires-Dist: scipy; extra == "extractors"
@@ -37,13 +37,13 @@ Requires-Dist: ibllib>=2.36.0; 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.7.0; extra == "streaming-extractors"
40
+ Requires-Dist: ONE-api<2.10.0,>=2.7.0; extra == "streaming-extractors"
41
41
  Requires-Dist: ibllib>=2.36.0; extra == "streaming-extractors"
42
42
  Requires-Dist: pynwb>=2.6.0; extra == "streaming-extractors"
43
43
  Requires-Dist: fsspec; extra == "streaming-extractors"
44
44
  Requires-Dist: aiohttp; extra == "streaming-extractors"
45
45
  Requires-Dist: requests; extra == "streaming-extractors"
46
- Requires-Dist: hdmf-zarr>=0.5.0; extra == "streaming-extractors"
46
+ Requires-Dist: hdmf-zarr>=0.11.0; extra == "streaming-extractors"
47
47
  Requires-Dist: remfile; extra == "streaming-extractors"
48
48
  Requires-Dist: s3fs; extra == "streaming-extractors"
49
49
  Provides-Extra: preprocessing
@@ -58,6 +58,8 @@ Requires-Dist: distinctipy; extra == "full"
58
58
  Requires-Dist: matplotlib>=3.6; extra == "full"
59
59
  Requires-Dist: cuda-python; platform_system != "Darwin" and extra == "full"
60
60
  Requires-Dist: numba; extra == "full"
61
+ Requires-Dist: skops; extra == "full"
62
+ Requires-Dist: huggingface_hub; extra == "full"
61
63
  Provides-Extra: widgets
62
64
  Requires-Dist: matplotlib; extra == "widgets"
63
65
  Requires-Dist: ipympl; extra == "widgets"
@@ -92,6 +94,8 @@ Requires-Dist: tridesclous>=1.6.8; extra == "test"
92
94
  Requires-Dist: pymde; extra == "test"
93
95
  Requires-Dist: torch; extra == "test"
94
96
  Requires-Dist: pynndescent; extra == "test"
97
+ Requires-Dist: skops; extra == "test"
98
+ Requires-Dist: huggingface_hub; extra == "test"
95
99
  Provides-Extra: docs
96
100
  Requires-Dist: Sphinx; extra == "docs"
97
101
  Requires-Dist: sphinx_rtd_theme>=1.2; extra == "docs"
@@ -105,6 +109,8 @@ Requires-Dist: pandas; extra == "docs"
105
109
  Requires-Dist: hdbscan>=0.8.33; extra == "docs"
106
110
  Requires-Dist: numba; extra == "docs"
107
111
  Requires-Dist: networkx; extra == "docs"
112
+ Requires-Dist: skops; extra == "docs"
113
+ Requires-Dist: scikit-learn; extra == "docs"
108
114
  Requires-Dist: pooch>=1.8.2; extra == "docs"
109
115
  Requires-Dist: datalad>=1.0.2; extra == "docs"
110
116
  Provides-Extra: dev
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "spikeinterface"
3
- version = "0.101.2"
3
+ version = "0.102.0"
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,<4.0"
10
+ requires-python = ">=3.9,<3.13"
11
11
  classifiers = [
12
12
  "Programming Language :: Python :: 3 :: Only",
13
13
  "License :: OSI Approved :: MIT License",
@@ -20,11 +20,11 @@ classifiers = [
20
20
 
21
21
 
22
22
  dependencies = [
23
- "numpy>=1.20, <2.0", # 1.20 np.ptp, 1.26 might be necessary for avoiding pickling errors when numpy >2.0
23
+ "numpy>=1.20",
24
24
  "threadpoolctl>=3.0.0",
25
25
  "tqdm",
26
- "zarr>=2.16,<2.18",
27
- "neo>=0.13.0",
26
+ "zarr>=2.18,<3",
27
+ "neo>=0.14.0",
28
28
  "probeinterface>=0.2.23",
29
29
  "packaging",
30
30
  ]
@@ -61,8 +61,8 @@ changelog = "https://spikeinterface.readthedocs.io/en/latest/whatisnew.html"
61
61
  extractors = [
62
62
  "MEArec>=1.8",
63
63
  "pynwb>=2.6.0",
64
- "hdmf-zarr>=0.5.0",
65
- "pyedflib>=0.1.30",
64
+ "hdmf-zarr>=0.11.0",
65
+ "pyedflib>=0.1.30,<0.1.39",
66
66
  "sonpy;python_version<'3.10'",
67
67
  "lxml", # lxml for neuroscope
68
68
  "scipy",
@@ -73,14 +73,14 @@ extractors = [
73
73
  ]
74
74
 
75
75
  streaming_extractors = [
76
- "ONE-api>=2.7.0", # alf sorter and streaming IBL
76
+ "ONE-api>=2.7.0,<2.10.0", # alf sorter and streaming IBL
77
77
  "ibllib>=2.36.0", # streaming IBL
78
78
  # Following dependencies are for streaming with nwb files
79
79
  "pynwb>=2.6.0",
80
80
  "fsspec",
81
81
  "aiohttp",
82
82
  "requests",
83
- "hdmf-zarr>=0.5.0",
83
+ "hdmf-zarr>=0.11.0",
84
84
  "remfile",
85
85
  "s3fs"
86
86
  ]
@@ -101,6 +101,8 @@ full = [
101
101
  "matplotlib>=3.6", # matplotlib.colormaps
102
102
  "cuda-python; platform_system != 'Darwin'",
103
103
  "numba",
104
+ "skops",
105
+ "huggingface_hub"
104
106
  ]
105
107
 
106
108
  widgets = [
@@ -171,6 +173,10 @@ test = [
171
173
  "torch",
172
174
  "pynndescent",
173
175
 
176
+ # curation
177
+ "skops",
178
+ "huggingface_hub",
179
+
174
180
  # for github test : probeinterface and neo from master
175
181
  # for release we need pypi, so this need to be commented
176
182
  # "probeinterface @ git+https://github.com/SpikeInterface/probeinterface.git",
@@ -192,6 +198,8 @@ docs = [
192
198
  "hdbscan>=0.8.33", # For sorters spykingcircus2 + tridesclous
193
199
  "numba", # For many postprocessing functions
194
200
  "networkx",
201
+ "skops", # For auotmated curation
202
+ "scikit-learn", # For auotmated curation
195
203
  # Download data
196
204
  "pooch>=1.8.2",
197
205
  "datalad>=1.0.2",
@@ -1,7 +1,4 @@
1
- """
2
-
3
-
4
- """
1
+ """ """
5
2
 
6
3
  import importlib.metadata
7
4
 
@@ -0,0 +1,7 @@
1
+ """
2
+ Module to benchmark:
3
+ * sorters
4
+ * some sorting components (clustering, motion, template matching)
5
+ """
6
+
7
+ from .benchmark_sorter import SorterStudy
@@ -11,7 +11,7 @@ import time
11
11
 
12
12
  from spikeinterface.core import SortingAnalyzer
13
13
 
14
- from spikeinterface import load_extractor, create_sorting_analyzer, load_sorting_analyzer
14
+ from spikeinterface import load, create_sorting_analyzer, load_sorting_analyzer
15
15
  from spikeinterface.widgets import get_some_colors
16
16
 
17
17
 
@@ -131,7 +131,7 @@ class BenchmarkStudy:
131
131
 
132
132
  return cls(study_folder)
133
133
 
134
- def create_benchmark(self):
134
+ def create_benchmark(self, key):
135
135
  raise NotImplementedError
136
136
 
137
137
  def scan_folder(self):
@@ -150,13 +150,13 @@ class BenchmarkStudy:
150
150
  analyzer = load_sorting_analyzer(folder)
151
151
  self.analyzers[key] = analyzer
152
152
  # the sorting is in memory here we take the saved one because comparisons need to pickle it later
153
- sorting = load_extractor(analyzer.folder / "sorting")
153
+ sorting = load(analyzer.folder / "sorting")
154
154
  self.datasets[key] = analyzer.recording, sorting
155
155
 
156
156
  # for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"):
157
157
  # key = rec_file.stem
158
- # rec = load_extractor(rec_file)
159
- # gt_sorting = load_extractor(self.folder / f"datasets" / "gt_sortings" / key)
158
+ # rec = load(rec_file)
159
+ # gt_sorting = load(self.folder / f"datasets" / "gt_sortings" / key)
160
160
  # self.datasets[key] = (rec, gt_sorting)
161
161
 
162
162
  with open(self.folder / "cases.pickle", "rb") as f:
@@ -208,10 +208,11 @@ class BenchmarkStudy:
208
208
  for key in case_keys:
209
209
 
210
210
  result_folder = self.folder / "results" / self.key_to_str(key)
211
+ sorter_folder = self.folder / "sorters" / self.key_to_str(key)
211
212
 
212
213
  if keep and result_folder.exists():
213
214
  continue
214
- elif not keep and result_folder.exists():
215
+ elif not keep and (result_folder.exists() or sorter_folder.exists()):
215
216
  self.remove_benchmark(key)
216
217
  job_keys.append(key)
217
218
 
@@ -258,25 +259,9 @@ class BenchmarkStudy:
258
259
  return df
259
260
 
260
261
  def plot_run_times(self, case_keys=None):
261
- if case_keys is None:
262
- case_keys = list(self.cases.keys())
263
- run_times = self.get_run_times(case_keys=case_keys)
264
-
265
- colors = self.get_colors()
266
- import matplotlib.pyplot as plt
262
+ from .benchmark_plot_tools import plot_run_times
267
263
 
268
- fig, ax = plt.subplots()
269
- labels = []
270
- for i, key in enumerate(case_keys):
271
- labels.append(self.cases[key]["label"])
272
- rt = run_times.at[key, "run_times"]
273
- ax.bar(i, rt, width=0.8, color=colors[key])
274
- ax.set_xticks(np.arange(len(case_keys)))
275
- ax.set_xticklabels(labels, rotation=45.0)
276
- return fig
277
-
278
- # ax = run_times.plot(kind="bar")
279
- # return ax.figure
264
+ return plot_run_times(self, case_keys=case_keys)
280
265
 
281
266
  def compute_results(self, case_keys=None, verbose=False, **result_params):
282
267
  if case_keys is None:
@@ -443,9 +428,9 @@ class Benchmark:
443
428
  elif format == "sorting":
444
429
  from spikeinterface.core import load_extractor
445
430
 
446
- result[k] = load_extractor(folder / k)
431
+ result[k] = load(folder / k)
447
432
  elif format == "Motion":
448
- from spikeinterface.sortingcomponents.motion import Motion
433
+ from spikeinterface.core.motion import Motion
449
434
 
450
435
  result[k] = Motion.load(folder / k)
451
436
  elif format == "zarr_templates":
@@ -462,10 +447,3 @@ class Benchmark:
462
447
  def compute_result(self):
463
448
  # run becnhmark result
464
449
  raise NotImplementedError
465
-
466
-
467
- def _simpleaxis(ax):
468
- ax.spines["top"].set_visible(False)
469
- ax.spines["right"].set_visible(False)
470
- ax.get_xaxis().tick_bottom()
471
- ax.get_yaxis().tick_left()
@@ -11,8 +11,7 @@ from spikeinterface.widgets import (
11
11
 
12
12
  import numpy as np
13
13
 
14
-
15
- from .benchmark_tools import BenchmarkStudy, Benchmark
14
+ from .benchmark_base import Benchmark, BenchmarkStudy
16
15
  from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
17
16
  from spikeinterface.core.template_tools import get_template_extremum_channel
18
17
 
@@ -161,49 +160,21 @@ class ClusteringStudy(BenchmarkStudy):
161
160
 
162
161
  return count_units
163
162
 
164
- def plot_unit_counts(self, case_keys=None, figsize=None, **extra_kwargs):
165
- from spikeinterface.widgets.widget_list import plot_study_unit_counts
163
+ # plotting by methods
164
+ def plot_unit_counts(self, **kwargs):
165
+ from .benchmark_plot_tools import plot_unit_counts
166
166
 
167
- plot_study_unit_counts(self, case_keys, figsize=figsize, **extra_kwargs)
167
+ return plot_unit_counts(self, **kwargs)
168
168
 
169
- def plot_agreements(self, case_keys=None, figsize=(15, 15)):
170
- if case_keys is None:
171
- case_keys = list(self.cases.keys())
172
- import pylab as plt
169
+ def plot_agreement_matrix(self, **kwargs):
170
+ from .benchmark_plot_tools import plot_agreement_matrix
173
171
 
174
- fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
172
+ return plot_agreement_matrix(self, **kwargs)
175
173
 
176
- for count, key in enumerate(case_keys):
177
- ax = axs[0, count]
178
- ax.set_title(self.cases[key]["label"])
179
- plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
174
+ def plot_performances_vs_snr(self, **kwargs):
175
+ from .benchmark_plot_tools import plot_performances_vs_snr
180
176
 
181
- return fig
182
-
183
- def plot_performances_vs_snr(self, case_keys=None, figsize=(15, 15)):
184
- if case_keys is None:
185
- case_keys = list(self.cases.keys())
186
- import pylab as plt
187
-
188
- fig, axes = plt.subplots(ncols=1, nrows=3, figsize=figsize)
189
-
190
- for count, k in enumerate(("accuracy", "recall", "precision")):
191
-
192
- ax = axes[count]
193
- for key in case_keys:
194
- label = self.cases[key]["label"]
195
-
196
- analyzer = self.get_sorting_analyzer(key)
197
- metrics = analyzer.get_extension("quality_metrics").get_data()
198
- x = metrics["snr"].values
199
- y = self.get_result(key)["gt_comparison"].get_performance()[k].values
200
- ax.scatter(x, y, marker=".", label=label)
201
- ax.set_title(k)
202
-
203
- if count == 2:
204
- ax.legend()
205
-
206
- return fig
177
+ return plot_performances_vs_snr(self, **kwargs)
207
178
 
208
179
  def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)):
209
180
 
@@ -9,11 +9,8 @@ from spikeinterface.widgets import (
9
9
  )
10
10
 
11
11
  import numpy as np
12
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy
12
+ from .benchmark_base import Benchmark, BenchmarkStudy
13
13
  from spikeinterface.core.basesorting import minimum_spike_dtype
14
- from spikeinterface.sortingcomponents.tools import remove_empty_templates
15
- from spikeinterface.core.recording_tools import get_noise_levels
16
- from spikeinterface.core.sparsity import compute_sparsity
17
14
 
18
15
 
19
16
  class MatchingBenchmark(Benchmark):
@@ -36,7 +33,7 @@ class MatchingBenchmark(Benchmark):
36
33
  sorting["unit_index"] = spikes["cluster_index"]
37
34
  sorting["segment_index"] = spikes["segment_index"]
38
35
  sorting = NumpySorting(sorting, self.recording.sampling_frequency, unit_ids)
39
- self.result = {"sorting": sorting}
36
+ self.result = {"sorting": sorting, "spikes": spikes}
40
37
  self.result["templates"] = self.templates
41
38
 
42
39
  def compute_result(self, with_collision=False, **result_params):
@@ -48,6 +45,7 @@ class MatchingBenchmark(Benchmark):
48
45
 
49
46
  _run_key_saved = [
50
47
  ("sorting", "sorting"),
48
+ ("spikes", "npy"),
51
49
  ("templates", "zarr_templates"),
52
50
  ]
53
51
  _result_key_saved = [("gt_collision", "pickle"), ("gt_comparison", "pickle")]
@@ -64,45 +62,25 @@ class MatchingStudy(BenchmarkStudy):
64
62
  benchmark = MatchingBenchmark(recording, gt_sorting, params)
65
63
  return benchmark
66
64
 
67
- def plot_agreements(self, case_keys=None, figsize=None):
68
- if case_keys is None:
69
- case_keys = list(self.cases.keys())
70
- import pylab as plt
71
-
72
- fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
73
-
74
- for count, key in enumerate(case_keys):
75
- ax = axs[0, count]
76
- ax.set_title(self.cases[key]["label"])
77
- plot_agreement_matrix(self.get_result(key)["gt_comparison"], ax=ax)
78
-
79
- def plot_performances_vs_snr(self, case_keys=None, figsize=None, metrics=["accuracy", "recall", "precision"]):
80
- if case_keys is None:
81
- case_keys = list(self.cases.keys())
65
+ def plot_agreement_matrix(self, **kwargs):
66
+ from .benchmark_plot_tools import plot_agreement_matrix
82
67
 
83
- fig, axs = plt.subplots(ncols=1, nrows=len(metrics), figsize=figsize, squeeze=False)
68
+ return plot_agreement_matrix(self, **kwargs)
84
69
 
85
- for count, k in enumerate(metrics):
70
+ def plot_performances_vs_snr(self, **kwargs):
71
+ from .benchmark_plot_tools import plot_performances_vs_snr
86
72
 
87
- ax = axs[count, 0]
88
- for key in case_keys:
89
- label = self.cases[key]["label"]
73
+ return plot_performances_vs_snr(self, **kwargs)
90
74
 
91
- analyzer = self.get_sorting_analyzer(key)
92
- metrics = analyzer.get_extension("quality_metrics").get_data()
93
- x = metrics["snr"].values
94
- y = self.get_result(key)["gt_comparison"].get_performance()[k].values
95
- ax.scatter(x, y, marker=".", label=label)
96
- ax.set_title(k)
75
+ def plot_performances_comparison(self, **kwargs):
76
+ from .benchmark_plot_tools import plot_performances_comparison
97
77
 
98
- if count == 2:
99
- ax.legend()
100
-
101
- return fig
78
+ return plot_performances_comparison(self, **kwargs)
102
79
 
103
80
  def plot_collisions(self, case_keys=None, figsize=None):
104
81
  if case_keys is None:
105
82
  case_keys = list(self.cases.keys())
83
+ import matplotlib.pyplot as plt
106
84
 
107
85
  fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
108
86
 
@@ -119,70 +97,6 @@ class MatchingStudy(BenchmarkStudy):
119
97
 
120
98
  return fig
121
99
 
122
- def plot_comparison_matching(
123
- self,
124
- case_keys=None,
125
- performance_names=["accuracy", "recall", "precision"],
126
- colors=["g", "b", "r"],
127
- ylim=(-0.1, 1.1),
128
- figsize=None,
129
- ):
130
-
131
- if case_keys is None:
132
- case_keys = list(self.cases.keys())
133
-
134
- num_methods = len(case_keys)
135
- import pylab as plt
136
-
137
- fig, axs = plt.subplots(ncols=num_methods, nrows=num_methods, figsize=(10, 10))
138
- for i, key1 in enumerate(case_keys):
139
- for j, key2 in enumerate(case_keys):
140
- if len(axs.shape) > 1:
141
- ax = axs[i, j]
142
- else:
143
- ax = axs[j]
144
- comp1 = self.get_result(key1)["gt_comparison"]
145
- comp2 = self.get_result(key2)["gt_comparison"]
146
- if i <= j:
147
- for performance, color in zip(performance_names, colors):
148
- perf1 = comp1.get_performance()[performance]
149
- perf2 = comp2.get_performance()[performance]
150
- ax.plot(perf2, perf1, ".", label=performance, color=color)
151
-
152
- ax.plot([0, 1], [0, 1], "k--", alpha=0.5)
153
- ax.set_ylim(ylim)
154
- ax.set_xlim(ylim)
155
- ax.spines[["right", "top"]].set_visible(False)
156
- ax.set_aspect("equal")
157
-
158
- label1 = self.cases[key1]["label"]
159
- label2 = self.cases[key2]["label"]
160
- if j == i:
161
- ax.set_ylabel(f"{label1}")
162
- else:
163
- ax.set_yticks([])
164
- if i == j:
165
- ax.set_xlabel(f"{label2}")
166
- else:
167
- ax.set_xticks([])
168
- if i == num_methods - 1 and j == num_methods - 1:
169
- patches = []
170
- import matplotlib.patches as mpatches
171
-
172
- for color, name in zip(colors, performance_names):
173
- patches.append(mpatches.Patch(color=color, label=name))
174
- ax.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0.0)
175
- else:
176
- ax.spines["bottom"].set_visible(False)
177
- ax.spines["left"].set_visible(False)
178
- ax.spines["top"].set_visible(False)
179
- ax.spines["right"].set_visible(False)
180
- ax.set_xticks([])
181
- ax.set_yticks([])
182
- plt.tight_layout(h_pad=0, w_pad=0)
183
-
184
- return fig
185
-
186
100
  def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
187
101
  import pandas as pd
188
102
 
@@ -225,6 +139,7 @@ class MatchingStudy(BenchmarkStudy):
225
139
  plot_study_unit_counts(self, case_keys, figsize=figsize)
226
140
 
227
141
  def plot_unit_losses(self, before, after, metric=["precision"], figsize=None):
142
+ import matplotlib.pyplot as plt
228
143
 
229
144
  fig, axs = plt.subplots(ncols=1, nrows=len(metric), figsize=figsize, squeeze=False)
230
145
 
@@ -8,14 +8,15 @@ import time
8
8
  import numpy as np
9
9
 
10
10
  from spikeinterface.core import get_noise_levels
11
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy, _simpleaxis
11
+ from spikeinterface.core.motion import Motion
12
12
  from spikeinterface.sortingcomponents.motion import estimate_motion
13
13
  from spikeinterface.sortingcomponents.peak_detection import detect_peaks
14
14
  from spikeinterface.sortingcomponents.peak_selection import select_peaks
15
15
  from spikeinterface.sortingcomponents.peak_localization import localize_peaks
16
16
  from spikeinterface.widgets import plot_probe_map
17
17
 
18
- from spikeinterface.sortingcomponents.motion import Motion
18
+ from .benchmark_base import Benchmark, BenchmarkStudy
19
+ from .benchmark_plot_tools import _simpleaxis
19
20
 
20
21
  # import MEArec as mr
21
22
 
@@ -108,6 +109,8 @@ class MotionEstimationBenchmark(Benchmark):
108
109
  estimate_motion=t4 - t3,
109
110
  )
110
111
 
112
+ self.result["peaks"] = peaks
113
+ self.result["peak_locations"] = peak_locations
111
114
  self.result["step_run_times"] = step_run_times
112
115
  self.result["raw_motion"] = motion
113
116
 
@@ -130,6 +133,8 @@ class MotionEstimationBenchmark(Benchmark):
130
133
  self.result["motion"] = motion
131
134
 
132
135
  _run_key_saved = [
136
+ ("peaks", "npy"),
137
+ ("peak_locations", "npy"),
133
138
  ("raw_motion", "Motion"),
134
139
  ("step_run_times", "pickle"),
135
140
  ]
@@ -160,7 +165,9 @@ class MotionEstimationStudy(BenchmarkStudy):
160
165
  def plot_true_drift(self, case_keys=None, scaling_probe=1.5, figsize=(8, 6)):
161
166
  self.plot_drift(case_keys=case_keys, tested_drift=False, scaling_probe=scaling_probe, figsize=figsize)
162
167
 
163
- def plot_drift(self, case_keys=None, gt_drift=True, tested_drift=True, scaling_probe=1.0, figsize=(8, 6)):
168
+ def plot_drift(
169
+ self, case_keys=None, gt_drift=True, tested_drift=True, raster=False, scaling_probe=1.0, figsize=(8, 6)
170
+ ):
164
171
  import matplotlib.pyplot as plt
165
172
 
166
173
  if case_keys is None:
@@ -194,6 +201,13 @@ class MotionEstimationStudy(BenchmarkStudy):
194
201
 
195
202
  # for i in range(self.gt_unit_positions.shape[1]):
196
203
  # ax.plot(temporal_bins_s, self.gt_unit_positions[:, i], alpha=0.5, ls="--", c="0.5")
204
+ if raster:
205
+ peaks = bench.result["peaks"]
206
+ peak_locations = bench.result["peak_locations"]
207
+ rec = bench.recording
208
+ x = peaks["sample_index"] / rec.sampling_frequency
209
+ y = peak_locations[bench.direction]
210
+ ax.scatter(x, y, alpha=0.2, s=2, c=np.abs(peaks["amplitude"]), cmap="inferno")
197
211
 
198
212
  for i in range(gt_motion.displacement[0].shape[1]):
199
213
  depth = motion.spatial_bins_um[i]
@@ -10,7 +10,7 @@ from spikeinterface.sortingcomponents.motion.motion_interpolation import Interpo
10
10
  from spikeinterface.curation import MergeUnitsSorting
11
11
 
12
12
 
13
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy, _simpleaxis
13
+ from .benchmark_base import Benchmark, BenchmarkStudy
14
14
 
15
15
 
16
16
  class MotionInterpolationBenchmark(Benchmark):
@@ -12,10 +12,9 @@ from spikeinterface.core import get_noise_levels
12
12
 
13
13
  import numpy as np
14
14
 
15
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy
15
+ from .benchmark_base import Benchmark, BenchmarkStudy
16
16
  from spikeinterface.core.basesorting import minimum_spike_dtype
17
17
  from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
18
- from spikeinterface.core.template_tools import get_template_extremum_channel
19
18
 
20
19
 
21
20
  class PeakDetectionBenchmark(Benchmark):
@@ -6,7 +6,7 @@ from spikeinterface.postprocessing.localization_tools import (
6
6
  compute_grid_convolution,
7
7
  )
8
8
  import numpy as np
9
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy
9
+ from .benchmark_base import Benchmark, BenchmarkStudy
10
10
  from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
11
11
 
12
12
 
@@ -6,15 +6,9 @@ from spikeinterface.comparison import GroundTruthComparison
6
6
  from spikeinterface.comparison.comparisontools import make_matching_events
7
7
  from spikeinterface.core import get_noise_levels
8
8
 
9
- import time
10
- import string, random
11
- import pylab as plt
12
- import os
13
9
  import numpy as np
14
10
 
15
- from spikeinterface.sortingcomponents.benchmark.benchmark_tools import Benchmark, BenchmarkStudy
16
- from spikeinterface.core.basesorting import minimum_spike_dtype
17
- from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
11
+ from .benchmark_base import Benchmark, BenchmarkStudy
18
12
 
19
13
 
20
14
  class PeakSelectionBenchmark(Benchmark):