spikeinterface 0.102.2__tar.gz → 0.102.3__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 (350) hide show
  1. {spikeinterface-0.102.2/src/spikeinterface.egg-info → spikeinterface-0.102.3}/PKG-INFO +4 -4
  2. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/pyproject.toml +6 -7
  3. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_base.py +66 -7
  4. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_clustering.py +7 -2
  5. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_matching.py +7 -38
  6. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_detection.py +66 -42
  7. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_plot_tools.py +259 -118
  8. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_sorter.py +2 -64
  9. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/analyzer_extension_core.py +6 -3
  10. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/base.py +0 -4
  11. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baserecording.py +1 -1
  12. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baserecordingsnippets.py +0 -2
  13. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/basesorting.py +27 -51
  14. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/binaryrecordingextractor.py +21 -0
  15. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/channelsaggregationrecording.py +10 -10
  16. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sortinganalyzer.py +1 -1
  17. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/zarrextractors.py +0 -1
  18. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curation_tools.py +2 -2
  19. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/__init__.py +1 -0
  20. spikeinterface-0.102.3/src/spikeinterface/exporters/to_ibl.py +311 -0
  21. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/to_phy.py +1 -1
  22. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/extractorlist.py +2 -0
  23. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/iblextractors.py +7 -3
  24. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/biocam.py +15 -3
  25. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/blackrock.py +11 -7
  26. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neobaseextractor.py +3 -3
  27. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/openephys.py +128 -93
  28. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spikeglx.py +5 -3
  29. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neuropixels_utils.py +5 -5
  30. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/tridesclousextractors.py +0 -1
  31. spikeinterface-0.102.3/src/spikeinterface/extractors/whitematterrecordingextractor.py +72 -0
  32. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/principal_component.py +2 -2
  33. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/spike_amplitudes.py +0 -1
  34. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/template_metrics.py +0 -2
  35. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/__init__.py +8 -1
  36. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/motion.py +261 -110
  37. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/preprocessinglist.py +1 -0
  38. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/scale.py +0 -3
  39. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/misc_metrics.py +13 -7
  40. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort4.py +78 -16
  41. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus.py +4 -3
  42. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/spyking_circus2.py +165 -148
  43. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/runsorter.py +0 -1
  44. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/__init__.py +1 -1
  45. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/misc.py +13 -18
  46. spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/circus.py +245 -0
  47. spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/graph_clustering.py +205 -0
  48. spikeinterface-0.102.3/src/spikeinterface/sortingcomponents/clustering/graph_tools.py +229 -0
  49. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/method_list.py +2 -0
  50. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/peak_svd.py +16 -1
  51. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/split.py +55 -13
  52. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/tools.py +164 -0
  53. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/circus.py +11 -6
  54. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/tdc.py +8 -3
  55. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_interpolation.py +5 -3
  56. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/motion.py +3 -1
  57. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/traces.py +9 -12
  58. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_locations.py +29 -8
  59. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_waveforms.py +16 -3
  60. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/widget_list.py +5 -0
  61. {spikeinterface-0.102.2 → spikeinterface-0.102.3/src/spikeinterface.egg-info}/PKG-INFO +4 -4
  62. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/SOURCES.txt +4 -0
  63. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/requires.txt +4 -3
  64. spikeinterface-0.102.2/src/spikeinterface/sortingcomponents/clustering/circus.py +0 -317
  65. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/LICENSE +0 -0
  66. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/README.md +0 -0
  67. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/setup.cfg +0 -0
  68. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/setup.py +0 -0
  69. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/__init__.py +0 -0
  70. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/__init__.py +0 -0
  71. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_merging.py +0 -0
  72. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_motion_estimation.py +0 -0
  73. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_motion_interpolation.py +0 -0
  74. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_localization.py +0 -0
  75. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_peak_selection.py +0 -0
  76. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/benchmark/benchmark_tools.py +0 -0
  77. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/__init__.py +0 -0
  78. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/basecomparison.py +0 -0
  79. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/collision.py +0 -0
  80. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/comparisontools.py +0 -0
  81. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/correlogram.py +0 -0
  82. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/groundtruthstudy.py +0 -0
  83. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/hybrid.py +0 -0
  84. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/multicomparisons.py +0 -0
  85. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/comparison/paircomparisons.py +0 -0
  86. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/__init__.py +0 -0
  87. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/baseevent.py +0 -0
  88. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/basesnippets.py +0 -0
  89. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/binaryfolder.py +0 -0
  90. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/channelslice.py +0 -0
  91. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/core_tools.py +0 -0
  92. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/datasets.py +0 -0
  93. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/frameslicerecording.py +0 -0
  94. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/frameslicesorting.py +0 -0
  95. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/generate.py +0 -0
  96. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/globals.py +0 -0
  97. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/job_tools.py +0 -0
  98. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/loading.py +0 -0
  99. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/motion.py +0 -0
  100. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/node_pipeline.py +0 -0
  101. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npyfoldersnippets.py +0 -0
  102. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npysnippetsextractor.py +0 -0
  103. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npzfolder.py +0 -0
  104. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/npzsortingextractor.py +0 -0
  105. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/numpyextractors.py +0 -0
  106. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/old_api_utils.py +0 -0
  107. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/recording_tools.py +0 -0
  108. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/segmentutils.py +0 -0
  109. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/snippets_tools.py +0 -0
  110. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sorting_tools.py +0 -0
  111. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sortingfolder.py +0 -0
  112. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/sparsity.py +0 -0
  113. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/template.py +0 -0
  114. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/template_tools.py +0 -0
  115. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/testing.py +0 -0
  116. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/testing_tools.py +0 -0
  117. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/unitsaggregationsorting.py +0 -0
  118. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/unitsselectionsorting.py +0 -0
  119. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/waveform_tools.py +0 -0
  120. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/waveforms_extractor_backwards_compatibility.py +0 -0
  121. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/core/zarrrecordingextractor.py +0 -0
  122. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/__init__.py +0 -0
  123. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/auto_merge.py +0 -0
  124. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curation_format.py +0 -0
  125. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/curationsorting.py +0 -0
  126. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/mergeunitssorting.py +0 -0
  127. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/model_based_curation.py +0 -0
  128. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_duplicated_spikes.py +0 -0
  129. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_excess_spikes.py +0 -0
  130. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/remove_redundant.py +0 -0
  131. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/sortingview_curation.py +0 -0
  132. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/splitunitsorting.py +0 -0
  133. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/curation/train_manual_curation.py +0 -0
  134. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/exporters/report.py +0 -0
  135. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/__init__.py +0 -0
  136. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/alfsortingextractor.py +0 -0
  137. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/bids.py +0 -0
  138. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/cbin_ibl.py +0 -0
  139. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/cellexplorersortingextractor.py +0 -0
  140. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/combinatoextractors.py +0 -0
  141. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/hdsortextractors.py +0 -0
  142. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/herdingspikesextractors.py +0 -0
  143. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/klustaextractors.py +0 -0
  144. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/matlabhelpers.py +0 -0
  145. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mclustextractors.py +0 -0
  146. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mcsh5extractors.py +0 -0
  147. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/mdaextractors.py +0 -0
  148. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/__init__.py +0 -0
  149. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/alphaomega.py +0 -0
  150. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/axona.py +0 -0
  151. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/ced.py +0 -0
  152. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/edf.py +0 -0
  153. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/intan.py +0 -0
  154. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/maxwell.py +0 -0
  155. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/mcsraw.py +0 -0
  156. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/mearec.py +0 -0
  157. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neo_utils.py +0 -0
  158. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuralynx.py +0 -0
  159. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuroexplorer.py +0 -0
  160. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuronexus.py +0 -0
  161. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/neuroscope.py +0 -0
  162. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/nix.py +0 -0
  163. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/plexon.py +0 -0
  164. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/plexon2.py +0 -0
  165. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spike2.py +0 -0
  166. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/spikegadgets.py +0 -0
  167. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/neoextractors/tdt.py +0 -0
  168. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/nwbextractors.py +0 -0
  169. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/phykilosortextractors.py +0 -0
  170. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/shybridextractors.py +0 -0
  171. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/sinapsrecordingextractors.py +0 -0
  172. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/spykingcircusextractors.py +0 -0
  173. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/toy_example.py +0 -0
  174. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/waveclussnippetstextractors.py +0 -0
  175. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/waveclustextractors.py +0 -0
  176. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/extractors/yassextractors.py +0 -0
  177. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/full.py +0 -0
  178. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/__init__.py +0 -0
  179. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/drift_tools.py +0 -0
  180. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/drifting_generator.py +0 -0
  181. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/hybrid_tools.py +0 -0
  182. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/noise_tools.py +0 -0
  183. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/splitting_tools.py +0 -0
  184. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/generation/template_database.py +0 -0
  185. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/__init__.py +0 -0
  186. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/alignsorting.py +0 -0
  187. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/amplitude_scalings.py +0 -0
  188. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/correlograms.py +0 -0
  189. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/isi.py +0 -0
  190. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/localization_tools.py +0 -0
  191. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/noise_level.py +0 -0
  192. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/spike_locations.py +0 -0
  193. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/template_similarity.py +0 -0
  194. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/postprocessing/unit_locations.py +0 -0
  195. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/align_snippets.py +0 -0
  196. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/astype.py +0 -0
  197. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/average_across_direction.py +0 -0
  198. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/basepreprocessor.py +0 -0
  199. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/clip.py +0 -0
  200. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/common_reference.py +0 -0
  201. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/correct_lsb.py +0 -0
  202. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/decimate.py +0 -0
  203. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/__init__.py +0 -0
  204. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/deepinterpolation.py +0 -0
  205. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/generators.py +0 -0
  206. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/tf_utils.py +0 -0
  207. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/deepinterpolation/train.py +0 -0
  208. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/depth_order.py +0 -0
  209. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/detect_bad_channels.py +0 -0
  210. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/directional_derivative.py +0 -0
  211. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter.py +0 -0
  212. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter_gaussian.py +0 -0
  213. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/filter_opencl.py +0 -0
  214. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/highpass_spatial_filter.py +0 -0
  215. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/interpolate_bad_channels.py +0 -0
  216. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/normalize_scale.py +0 -0
  217. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/phase_shift.py +0 -0
  218. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/preprocessing_tools.py +0 -0
  219. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/rectify.py +0 -0
  220. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/remove_artifacts.py +0 -0
  221. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/resample.py +0 -0
  222. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/silence_periods.py +0 -0
  223. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/unsigned_to_signed.py +0 -0
  224. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/whiten.py +0 -0
  225. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/preprocessing/zero_channel_pad.py +0 -0
  226. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/__init__.py +0 -0
  227. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/pca_metrics.py +0 -0
  228. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/quality_metric_calculator.py +0 -0
  229. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/quality_metric_list.py +0 -0
  230. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/qualitymetrics/utils.py +0 -0
  231. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/__init__.py +0 -0
  232. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/basesorter.py +0 -0
  233. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/container_tools.py +0 -0
  234. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/__init__.py +0 -0
  235. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/combinato.py +0 -0
  236. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/hdsort.py +0 -0
  237. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/hdsort_master.m +0 -0
  238. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/herdingspikes.py +0 -0
  239. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/ironclust.py +0 -0
  240. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort.py +0 -0
  241. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2.py +0 -0
  242. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_5.py +0 -0
  243. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_5_master.m +0 -0
  244. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort2_master.m +0 -0
  245. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort3.py +0 -0
  246. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort3_master.m +0 -0
  247. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosort_master.m +0 -0
  248. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/kilosortbase.py +0 -0
  249. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/klusta.py +0 -0
  250. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/klusta_config_default.prm +0 -0
  251. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/mountainsort4.py +0 -0
  252. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/mountainsort5.py +0 -0
  253. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/pykilosort.py +0 -0
  254. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/sc_config_default.params +0 -0
  255. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/spyking_circus.py +0 -0
  256. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/tridesclous.py +0 -0
  257. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_master.m +0 -0
  258. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_snippets.py +0 -0
  259. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/waveclus_snippets_master.m +0 -0
  260. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/yass.py +0 -0
  261. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/external/yass_config_default.yaml +0 -0
  262. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/__init__.py +0 -0
  263. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/si_based.py +0 -0
  264. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/simplesorter.py +0 -0
  265. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/internal/tridesclous2.py +0 -0
  266. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/launcher.py +0 -0
  267. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/sorterlist.py +0 -0
  268. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/constructNPYheader.m +0 -0
  269. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/shellscript.py +0 -0
  270. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sorters/utils/writeNPY.m +0 -0
  271. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/__init__.py +0 -0
  272. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/__init__.py +0 -0
  273. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/clean.py +0 -0
  274. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/clustering_tools.py +0 -0
  275. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/dummy.py +0 -0
  276. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/isocut5.py +0 -0
  277. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/main.py +0 -0
  278. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/merge.py +0 -0
  279. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position.py +0 -0
  280. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_and_features.py +0 -0
  281. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_and_pca.py +0 -0
  282. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/position_ptp_scaled.py +0 -0
  283. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/random_projections.py +0 -0
  284. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/sliding_hdbscan.py +0 -0
  285. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/sliding_nn.py +0 -0
  286. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/tdc.py +0 -0
  287. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/clustering/triage.py +0 -0
  288. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/features_from_peaks.py +0 -0
  289. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/__init__.py +0 -0
  290. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/base.py +0 -0
  291. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/main.py +0 -0
  292. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/method_list.py +0 -0
  293. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/naive.py +0 -0
  294. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/matching/wobble.py +0 -0
  295. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/__init__.py +0 -0
  296. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/decentralized.py +0 -0
  297. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/dredge.py +0 -0
  298. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/iterative_template.py +0 -0
  299. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/medicine.py +0 -0
  300. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_cleaner.py +0 -0
  301. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_estimation.py +0 -0
  302. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/motion/motion_utils.py +0 -0
  303. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_detection.py +0 -0
  304. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_localization.py +0 -0
  305. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_pipeline.py +0 -0
  306. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/peak_selection.py +0 -0
  307. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/tools.py +0 -0
  308. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/__init__.py +0 -0
  309. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/hanning_filter.py +0 -0
  310. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/neural_network_denoiser.py +0 -0
  311. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/savgol_denoiser.py +0 -0
  312. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/temporal_pca.py +0 -0
  313. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/waveform_thresholder.py +0 -0
  314. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/sortingcomponents/waveforms/waveform_utils.py +0 -0
  315. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/__init__.py +0 -0
  316. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/all_amplitudes_distributions.py +0 -0
  317. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/amplitudes.py +0 -0
  318. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/autocorrelograms.py +0 -0
  319. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/base.py +0 -0
  320. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/collision.py +0 -0
  321. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/comparison.py +0 -0
  322. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/crosscorrelograms.py +0 -0
  323. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/gtstudy.py +0 -0
  324. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/isi_distribution.py +0 -0
  325. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/metrics.py +0 -0
  326. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/multicomparison.py +0 -0
  327. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/peak_activity.py +0 -0
  328. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/peaks_on_probe.py +0 -0
  329. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/potential_merges.py +0 -0
  330. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/probe_map.py +0 -0
  331. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/quality_metrics.py +0 -0
  332. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/rasters.py +0 -0
  333. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/sorting_summary.py +0 -0
  334. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spike_locations.py +0 -0
  335. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spike_locations_by_time.py +0 -0
  336. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/spikes_on_traces.py +0 -0
  337. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/template_metrics.py +0 -0
  338. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/template_similarity.py +0 -0
  339. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_depths.py +0 -0
  340. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_presence.py +0 -0
  341. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_probe_map.py +0 -0
  342. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_summary.py +0 -0
  343. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_templates.py +0 -0
  344. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/unit_waveforms_density_map.py +0 -0
  345. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils.py +0 -0
  346. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_ipywidgets.py +0 -0
  347. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_matplotlib.py +0 -0
  348. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface/widgets/utils_sortingview.py +0 -0
  349. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/dependency_links.txt +0 -0
  350. {spikeinterface-0.102.2 → spikeinterface-0.102.3}/src/spikeinterface.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spikeinterface
3
- Version: 0.102.2
3
+ Version: 0.102.3
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
@@ -22,14 +22,15 @@ Requires-Dist: numpy>=2.0.0; python_version >= "3.13"
22
22
  Requires-Dist: threadpoolctl>=3.0.0
23
23
  Requires-Dist: tqdm
24
24
  Requires-Dist: zarr<3,>=2.18
25
- Requires-Dist: neo>=0.14.0
25
+ Requires-Dist: neo>=0.14.1
26
26
  Requires-Dist: probeinterface>=0.2.23
27
27
  Requires-Dist: packaging
28
+ Requires-Dist: numcodecs<0.16.0
28
29
  Provides-Extra: extractors
29
30
  Requires-Dist: MEArec>=1.8; extra == "extractors"
30
31
  Requires-Dist: pynwb>=2.6.0; extra == "extractors"
31
32
  Requires-Dist: hdmf-zarr>=0.11.0; extra == "extractors"
32
- Requires-Dist: pyedflib<0.1.39,>=0.1.30; extra == "extractors"
33
+ Requires-Dist: pyedflib>=0.1.30; extra == "extractors"
33
34
  Requires-Dist: sonpy; python_version < "3.10" and extra == "extractors"
34
35
  Requires-Dist: lxml; extra == "extractors"
35
36
  Requires-Dist: scipy; extra == "extractors"
@@ -84,7 +85,6 @@ Requires-Dist: pytest; extra == "test"
84
85
  Requires-Dist: pytest-dependency; extra == "test"
85
86
  Requires-Dist: pytest-cov; extra == "test"
86
87
  Requires-Dist: psutil; extra == "test"
87
- Requires-Dist: huggingface_hub; extra == "test"
88
88
  Requires-Dist: ibllib; extra == "test"
89
89
  Requires-Dist: s3fs; extra == "test"
90
90
  Requires-Dist: numba<0.61.0; python_version < "3.13" and extra == "test"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spikeinterface"
3
- version = "0.102.2"
3
+ version = "0.102.3"
4
4
  authors = [
5
5
  { name="Alessio Buccino", email="alessiop.buccino@gmail.com" },
6
6
  { name="Samuel Garcia", email="sam.garcia.die@gmail.com" },
@@ -25,9 +25,10 @@ dependencies = [
25
25
  "threadpoolctl>=3.0.0",
26
26
  "tqdm",
27
27
  "zarr>=2.18,<3",
28
- "neo>=0.14.0",
28
+ "neo>=0.14.1",
29
29
  "probeinterface>=0.2.23",
30
30
  "packaging",
31
+ "numcodecs<0.16.0", # For supporting zarr < 3
31
32
  ]
32
33
 
33
34
  [build-system]
@@ -63,7 +64,7 @@ extractors = [
63
64
  "MEArec>=1.8",
64
65
  "pynwb>=2.6.0",
65
66
  "hdmf-zarr>=0.11.0",
66
- "pyedflib>=0.1.30,<0.1.39",
67
+ "pyedflib>=0.1.30",
67
68
  "sonpy;python_version<'3.10'",
68
69
  "lxml", # lxml for neuroscope
69
70
  "scipy",
@@ -150,8 +151,6 @@ test = [
150
151
  "pytest-cov",
151
152
  "psutil",
152
153
 
153
- "huggingface_hub",
154
-
155
154
  # preprocessing
156
155
  "ibllib", # for IBL
157
156
 
@@ -194,8 +193,8 @@ docs = [
194
193
  "hdbscan>=0.8.33", # For sorters spykingcircus2 + tridesclous
195
194
  "numba", # For many postprocessing functions
196
195
  "networkx",
197
- "skops", # For auotmated curation
198
- "scikit-learn", # For auotmated curation
196
+ "skops", # For automated curation
197
+ "scikit-learn", # For automated curation
199
198
  # Download data
200
199
  "pooch>=1.8.2",
201
200
  "datalad>=1.0.2",
@@ -176,18 +176,12 @@ class BenchmarkStudy:
176
176
  self.levels = self.info["levels"]
177
177
 
178
178
  for key, folder in self.analyzers_path.items():
179
- analyzer = load_sorting_analyzer(folder)
179
+ analyzer = load_sorting_analyzer(folder, load_extensions=False)
180
180
  self.analyzers[key] = analyzer
181
181
  # the sorting is in memory here we take the saved one because comparisons need to pickle it later
182
182
  sorting = load(analyzer.folder / "sorting")
183
183
  self.datasets[key] = analyzer.recording, sorting
184
184
 
185
- # for rec_file in (self.folder / "datasets" / "recordings").glob("*.pickle"):
186
- # key = rec_file.stem
187
- # rec = load(rec_file)
188
- # gt_sorting = load(self.folder / f"datasets" / "gt_sortings" / key)
189
- # self.datasets[key] = (rec, gt_sorting)
190
-
191
185
  with open(self.folder / "cases.pickle", "rb") as f:
192
186
  self.cases = pickle.load(f)
193
187
 
@@ -619,3 +613,68 @@ class Benchmark:
619
613
  def compute_result(self):
620
614
  # run becnhmark result
621
615
  raise NotImplementedError
616
+
617
+
618
+ # Common feature accross some benchmark : sorter + matching
619
+ class MixinStudyUnitCount:
620
+ def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
621
+ import pandas as pd
622
+
623
+ if case_keys is None:
624
+ case_keys = list(self.cases.keys())
625
+
626
+ if isinstance(case_keys[0], str):
627
+ index = pd.Index(case_keys, name=self.levels)
628
+ else:
629
+ index = pd.MultiIndex.from_tuples(case_keys, names=self.levels)
630
+
631
+ columns = ["num_gt", "num_sorter", "num_well_detected"]
632
+ key0 = case_keys[0]
633
+ comp = self.get_result(key0)["gt_comparison"]
634
+ if comp.exhaustive_gt:
635
+ columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"])
636
+ count_units = pd.DataFrame(index=index, columns=columns, dtype=int)
637
+
638
+ for key in case_keys:
639
+ comp = self.get_result(key)["gt_comparison"]
640
+
641
+ gt_sorting = comp.sorting1
642
+ sorting = comp.sorting2
643
+
644
+ count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids())
645
+ count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids())
646
+ count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score)
647
+
648
+ if comp.exhaustive_gt:
649
+ count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score)
650
+ count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score)
651
+ count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score)
652
+ count_units.loc[key, "num_bad"] = comp.count_bad_units()
653
+
654
+ return count_units
655
+
656
+ def get_performance_by_unit(self, case_keys=None):
657
+ import pandas as pd
658
+
659
+ if case_keys is None:
660
+ case_keys = self.cases.keys()
661
+
662
+ perf_by_unit = []
663
+ for key in case_keys:
664
+ comp = self.get_result(key)["gt_comparison"]
665
+
666
+ perf = comp.get_performance(method="by_unit", output="pandas")
667
+
668
+ if isinstance(key, str):
669
+ perf[self.levels] = key
670
+ elif isinstance(key, tuple):
671
+ for col, k in zip(self.levels, key):
672
+ perf[col] = k
673
+
674
+ perf = perf.reset_index()
675
+ perf_by_unit.append(perf)
676
+
677
+ perf_by_unit = pd.concat(perf_by_unit)
678
+ perf_by_unit = perf_by_unit.set_index(self.levels)
679
+ perf_by_unit = perf_by_unit.sort_index()
680
+ return perf_by_unit
@@ -11,7 +11,7 @@ from spikeinterface.widgets import (
11
11
 
12
12
  import numpy as np
13
13
  from spikeinterface.core.job_tools import fix_job_kwargs, split_job_kwargs
14
- from .benchmark_base import Benchmark, BenchmarkStudy
14
+ from .benchmark_base import Benchmark, BenchmarkStudy, MixinStudyUnitCount
15
15
  from spikeinterface.core.sortinganalyzer import create_sorting_analyzer
16
16
  from spikeinterface.core.template_tools import get_template_extremum_channel
17
17
 
@@ -93,7 +93,7 @@ class ClusteringBenchmark(Benchmark):
93
93
  ]
94
94
 
95
95
 
96
- class ClusteringStudy(BenchmarkStudy):
96
+ class ClusteringStudy(BenchmarkStudy, MixinStudyUnitCount):
97
97
 
98
98
  benchmark_class = ClusteringBenchmark
99
99
 
@@ -196,6 +196,11 @@ class ClusteringStudy(BenchmarkStudy):
196
196
 
197
197
  return plot_performances_vs_depth_and_snr(self, *args, **kwargs)
198
198
 
199
+ def plot_performances_ordered(self, *args, **kwargs):
200
+ from .benchmark_plot_tools import plot_performances_ordered
201
+
202
+ return plot_performances_ordered(self, *args, **kwargs)
203
+
199
204
  def plot_error_metrics(self, metric="cosine", case_keys=None, figsize=(15, 5)):
200
205
 
201
206
  if case_keys is None:
@@ -11,7 +11,7 @@ from spikeinterface.widgets import (
11
11
  )
12
12
 
13
13
  import numpy as np
14
- from .benchmark_base import Benchmark, BenchmarkStudy
14
+ from .benchmark_base import Benchmark, BenchmarkStudy, MixinStudyUnitCount
15
15
  from spikeinterface.core.basesorting import minimum_spike_dtype
16
16
 
17
17
 
@@ -53,7 +53,7 @@ class MatchingBenchmark(Benchmark):
53
53
  _result_key_saved = [("gt_collision", "pickle"), ("gt_comparison", "pickle")]
54
54
 
55
55
 
56
- class MatchingStudy(BenchmarkStudy):
56
+ class MatchingStudy(BenchmarkStudy, MixinStudyUnitCount):
57
57
 
58
58
  benchmark_class = MatchingBenchmark
59
59
 
@@ -84,6 +84,11 @@ class MatchingStudy(BenchmarkStudy):
84
84
 
85
85
  return plot_performances_vs_depth_and_snr(self, *args, **kwargs)
86
86
 
87
+ def plot_performances_ordered(self, *args, **kwargs):
88
+ from .benchmark_plot_tools import plot_performances_ordered
89
+
90
+ return plot_performances_ordered(self, *args, **kwargs)
91
+
87
92
  def plot_collisions(self, case_keys=None, figsize=None):
88
93
  if case_keys is None:
89
94
  case_keys = list(self.cases.keys())
@@ -104,42 +109,6 @@ class MatchingStudy(BenchmarkStudy):
104
109
 
105
110
  return fig
106
111
 
107
- def get_count_units(self, case_keys=None, well_detected_score=None, redundant_score=None, overmerged_score=None):
108
- import pandas as pd
109
-
110
- if case_keys is None:
111
- case_keys = list(self.cases.keys())
112
-
113
- if isinstance(case_keys[0], str):
114
- index = pd.Index(case_keys, name=self.levels)
115
- else:
116
- index = pd.MultiIndex.from_tuples(case_keys, names=self.levels)
117
-
118
- columns = ["num_gt", "num_sorter", "num_well_detected"]
119
- comp = self.get_result(case_keys[0])["gt_comparison"]
120
- if comp.exhaustive_gt:
121
- columns.extend(["num_false_positive", "num_redundant", "num_overmerged", "num_bad"])
122
- count_units = pd.DataFrame(index=index, columns=columns, dtype=int)
123
-
124
- for key in case_keys:
125
- comp = self.get_result(key)["gt_comparison"]
126
- assert comp is not None, "You need to do study.run_comparisons() first"
127
-
128
- gt_sorting = comp.sorting1
129
- sorting = comp.sorting2
130
-
131
- count_units.loc[key, "num_gt"] = len(gt_sorting.get_unit_ids())
132
- count_units.loc[key, "num_sorter"] = len(sorting.get_unit_ids())
133
- count_units.loc[key, "num_well_detected"] = comp.count_well_detected_units(well_detected_score)
134
-
135
- if comp.exhaustive_gt:
136
- count_units.loc[key, "num_redundant"] = comp.count_redundant_units(redundant_score)
137
- count_units.loc[key, "num_overmerged"] = comp.count_overmerged_units(overmerged_score)
138
- count_units.loc[key, "num_false_positive"] = comp.count_false_positive_units(redundant_score)
139
- count_units.loc[key, "num_bad"] = comp.count_bad_units()
140
-
141
- return count_units
142
-
143
112
  def plot_unit_counts(self, case_keys=None, **kwargs):
144
113
  from .benchmark_plot_tools import plot_unit_counts
145
114
 
@@ -8,7 +8,7 @@ from spikeinterface.widgets import (
8
8
  )
9
9
  from spikeinterface.comparison.comparisontools import make_matching_events
10
10
  from spikeinterface.core import get_noise_levels
11
-
11
+ from spikeinterface.benchmark.benchmark_plot_tools import despine
12
12
 
13
13
  import numpy as np
14
14
  from spikeinterface.core.job_tools import fix_job_kwargs, split_job_kwargs
@@ -152,54 +152,29 @@ class PeakDetectionStudy(BenchmarkStudy):
152
152
  ax.set_title(self.cases[key]["label"])
153
153
  plot_agreement_matrix(self.get_result(key)["sliced_gt_comparison"], ax=ax)
154
154
 
155
- def plot_performances_vs_snr(self, case_keys=None, figsize=(15, 15), detect_threshold=None):
156
- if case_keys is None:
157
- case_keys = list(self.cases.keys())
158
-
159
- import matplotlib.pyplot as plt
160
-
161
- fig, axs = plt.subplots(ncols=1, nrows=3, figsize=figsize)
162
-
163
- for count, k in enumerate(("accuracy", "recall", "precision")):
164
-
165
- ax = axs[count]
166
- for key in case_keys:
167
- color = self.get_colors()[key]
168
- label = self.cases[key]["label"]
169
-
170
- analyzer = self.get_sorting_analyzer(key)
171
- metrics = analyzer.get_extension("quality_metrics").get_data()
172
- x = metrics["snr"].values
173
- y = self.get_result(key)["sliced_gt_comparison"].get_performance()[k].values
174
- ax.scatter(x, y, marker=".", label=label, color=color)
175
- ax.set_title(k)
176
- if detect_threshold is not None:
177
- ymin, ymax = ax.get_ylim()
178
- ax.plot([detect_threshold, detect_threshold], [ymin, ymax], "k--")
179
-
180
- popt = fit_sigmoid(x, y, p0=None)
181
- xfit = np.linspace(0, max(metrics["snr"].values), 100)
182
- ax.plot(xfit, sigmoid(xfit, *popt), color=color)
183
-
184
- if count == 2:
185
- ax.legend()
186
-
187
- def plot_detected_amplitudes(self, case_keys=None, figsize=(15, 5), detect_threshold=None):
155
+ def plot_detected_amplitudes(self, case_keys=None, figsize=(15, 5), detect_threshold=None, axs=None):
188
156
 
189
157
  if case_keys is None:
190
158
  case_keys = list(self.cases.keys())
191
159
  import matplotlib.pyplot as plt
192
160
 
193
- fig, axs = plt.subplots(ncols=len(case_keys), nrows=1, figsize=figsize, squeeze=False)
161
+ if axs is None:
162
+ fig, axs = plt.subplots(ncols=len(case_keys), figsize=figsize, squeeze=False)
163
+ else:
164
+ fig = axs[0].get_figure()
165
+ assert len(axs) == len(case_keys), "axs should be the same length as case_keys"
194
166
 
195
167
  for count, key in enumerate(case_keys):
196
- ax = axs[0, count]
168
+ ax = axs[count]
169
+ despine(ax)
197
170
  data1 = self.get_result(key)["peaks"]["amplitude"]
198
171
  data2 = self.get_result(key)["gt_amplitudes"]
172
+ color = self.get_colors()[key]
199
173
  bins = np.linspace(data2.min(), data2.max(), 100)
200
- ax.hist(data1, bins=bins, alpha=0.5, label="detected")
201
- ax.hist(data2, bins=bins, alpha=0.5, label="gt")
202
- ax.set_title(self.cases[key]["label"])
174
+ ax.hist(data1, bins=bins, label="detected", histtype="step", color=color, linewidth=2)
175
+ ax.hist(data2, bins=bins, alpha=0.1, label="gt", color="k")
176
+ ax.set_yscale("log")
177
+ # ax.set_title(self.cases[key]["label"])
203
178
  ax.legend()
204
179
  if detect_threshold is not None:
205
180
  noise_levels = get_noise_levels(self.benchmarks[key].recording, return_scaled=False).mean()
@@ -230,13 +205,62 @@ class PeakDetectionStudy(BenchmarkStudy):
230
205
  ax.set_ylabel("# frames")
231
206
  ax.set_xlabel("unit id")
232
207
 
233
- def plot_template_similarities(self, case_keys=None, metric="l2", figsize=(15, 5), detect_threshold=None):
208
+ def plot_mean_deltas(self, case_keys=None, figsize=(15, 5), ax=None):
234
209
 
235
210
  if case_keys is None:
236
211
  case_keys = list(self.cases.keys())
237
212
  import matplotlib.pyplot as plt
238
213
 
239
- fig, ax = plt.subplots(ncols=1, nrows=1, figsize=figsize, squeeze=True)
214
+ if ax is None:
215
+ fig, ax = plt.subplots(1, figsize=figsize)
216
+ else:
217
+ fig = ax.get_figure()
218
+
219
+ results = {}
220
+ labels = []
221
+ colors = []
222
+ for count, key in enumerate(case_keys):
223
+ gt_sorting = self.benchmarks[key].gt_sorting
224
+ results[key] = []
225
+ labels += [self.cases[key]["label"]]
226
+ data = self.get_result(key)["matches"]
227
+ for unit_ind, unit_id in enumerate(gt_sorting.unit_ids):
228
+ mask = data["labels"] == unit_id
229
+ results[key] += [np.mean(data["deltas"][mask])]
230
+
231
+ colors += [self.get_colors()[key]]
232
+ despine(ax)
233
+ plots = ax.violinplot(
234
+ results.values(),
235
+ range(len(case_keys)),
236
+ showmeans=True,
237
+ showmedians=False,
238
+ showextrema=False,
239
+ )
240
+
241
+ # Set the color of the violin patches
242
+ for pc, color in zip(plots["bodies"], colors):
243
+ pc.set_facecolor(color)
244
+ pc.set_edgecolor(color)
245
+
246
+ plots["cmeans"].set_colors(colors)
247
+
248
+ # ax.set_title(self.cases[key]["label"])
249
+ ax.set_xticks(range(len(case_keys)), labels, rotation=45)
250
+ ax.set_ylabel("# frames")
251
+ # ax.set_xlabel("unit id")
252
+
253
+ def plot_template_similarities(self, case_keys=None, metric="l2", figsize=(15, 5), detect_threshold=None, ax=None):
254
+
255
+ if case_keys is None:
256
+ case_keys = list(self.cases.keys())
257
+ import matplotlib.pyplot as plt
258
+
259
+ if ax is None:
260
+ fig, ax = plt.subplots(ncols=1, nrows=1, figsize=figsize, squeeze=True)
261
+ else:
262
+ fig = ax.get_figure()
263
+
240
264
  for key in case_keys:
241
265
 
242
266
  import sklearn.metrics
@@ -266,7 +290,7 @@ class PeakDetectionStudy(BenchmarkStudy):
266
290
  x = metrics["snr"].values
267
291
  y = distances
268
292
  ax.scatter(x, y, marker=".", label=label, color=color)
269
-
293
+ despine(ax)
270
294
  popt = fit_sigmoid(x, y, p0=None)
271
295
  xfit = np.linspace(0, max(metrics["snr"].values), 100)
272
296
  ax.plot(xfit, sigmoid(xfit, *popt), color=color)