celldetective 1.5.0b11__tar.gz → 1.5.0b12__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 (205) hide show
  1. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/PKG-INFO +1 -1
  2. celldetective-1.5.0b12/celldetective/_version.py +1 -0
  3. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/tableUI.py +2 -3
  4. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/PKG-INFO +1 -1
  5. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/SOURCES.txt +2 -1
  6. celldetective-1.5.0b12/tests/gui/test_tableui_track_collapse.py +239 -0
  7. celldetective-1.5.0b11/celldetective/_version.py +0 -1
  8. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/LICENSE +0 -0
  9. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/README.md +0 -0
  10. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/__init__.py +0 -0
  11. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/__main__.py +0 -0
  12. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/datasets/segmentation_annotations/blank +0 -0
  13. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/datasets/signal_annotations/blank +0 -0
  14. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/event_detection_models.py +0 -0
  15. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/events.py +0 -0
  16. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/exceptions.py +0 -0
  17. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/extra_properties.py +0 -0
  18. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/filters.py +0 -0
  19. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/InitWindow.py +0 -0
  20. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/__init__.py +0 -0
  21. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/about.py +0 -0
  22. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/analyze_block.py +0 -0
  23. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/__init__.py +0 -0
  24. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/channel_norm_generator.py +0 -0
  25. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/components.py +0 -0
  26. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/feature_choice.py +0 -0
  27. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/figure_canvas.py +0 -0
  28. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/list_widget.py +0 -0
  29. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/styles.py +0 -0
  30. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base/utils.py +0 -0
  31. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/base_annotator.py +0 -0
  32. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/classifier_widget.py +0 -0
  33. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/configure_new_exp.py +0 -0
  34. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/control_panel.py +0 -0
  35. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/dynamic_progress.py +0 -0
  36. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/event_annotator.py +0 -0
  37. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/generic_signal_plot.py +0 -0
  38. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/gui_utils.py +0 -0
  39. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/DL-segmentation-strategy.json +0 -0
  40. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/Threshold-vs-DL.json +0 -0
  41. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/cell-populations.json +0 -0
  42. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/exp-structure.json +0 -0
  43. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/feature-btrack.json +0 -0
  44. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/neighborhood.json +0 -0
  45. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/prefilter-for-segmentation.json +0 -0
  46. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/preprocessing.json +0 -0
  47. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/propagate-classification.json +0 -0
  48. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/track-postprocessing.json +0 -0
  49. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/help/tracking.json +0 -0
  50. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/interactions_block.py +0 -0
  51. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/interactive_timeseries_viewer.py +0 -0
  52. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/json_readers.py +0 -0
  53. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/__init__.py +0 -0
  54. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/background_model_free_layout.py +0 -0
  55. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/channel_offset_layout.py +0 -0
  56. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/local_correction_layout.py +0 -0
  57. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/model_fit_layout.py +0 -0
  58. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/operation_layout.py +0 -0
  59. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/layouts/protocol_designer_layout.py +0 -0
  60. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/measure_annotator.py +0 -0
  61. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/pair_event_annotator.py +0 -0
  62. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/plot_measurements.py +0 -0
  63. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/plot_signals_ui.py +0 -0
  64. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/preprocessing_block.py +0 -0
  65. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/process_block.py +0 -0
  66. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/seg_model_loader.py +0 -0
  67. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/__init__.py +0 -0
  68. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_cellpose_model_params.py +0 -0
  69. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_event_detection_model_params.py +0 -0
  70. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_segmentation_model_params.py +0 -0
  71. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_base.py +0 -0
  72. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_event_model_training.py +0 -0
  73. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_measurements.py +0 -0
  74. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_neighborhood.py +0 -0
  75. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_segmentation.py +0 -0
  76. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_segmentation_model_training.py +0 -0
  77. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_signal_annotator.py +0 -0
  78. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_settings_tracking.py +0 -0
  79. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/settings/_stardist_model_params.py +0 -0
  80. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/survival_ui.py +0 -0
  81. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/__init__.py +0 -0
  82. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/_maths.py +0 -0
  83. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/_merge_groups.py +0 -0
  84. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/_merge_one_hot.py +0 -0
  85. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/_query_table.py +0 -0
  86. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/table_ops/_rename_col.py +0 -0
  87. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/thresholds_gui.py +0 -0
  88. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/__init__.py +0 -0
  89. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/base_viewer.py +0 -0
  90. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/channel_offset_viewer.py +0 -0
  91. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/contour_viewer.py +0 -0
  92. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/size_viewer.py +0 -0
  93. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/spot_detection_viewer.py +0 -0
  94. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/viewers/threshold_viewer.py +0 -0
  95. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/gui/workers.py +0 -0
  96. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/logo-large.png +0 -0
  97. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/logo.png +0 -0
  98. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/signals_icon.png +0 -0
  99. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/splash-test.png +0 -0
  100. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/splash.png +0 -0
  101. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/splash0.png +0 -0
  102. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/survival2.png +0 -0
  103. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/vignette_signals2.png +0 -0
  104. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/icons/vignette_signals2.svg +0 -0
  105. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/links/zenodo.json +0 -0
  106. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/log_manager.py +0 -0
  107. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/measure.py +0 -0
  108. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/pair_signal_detection/blank +0 -0
  109. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/segmentation_effectors/blank +0 -0
  110. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/segmentation_generic/blank +0 -0
  111. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/segmentation_targets/blank +0 -0
  112. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/signal_detection/blank +0 -0
  113. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/tracking_configs/biased_motion.json +0 -0
  114. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/tracking_configs/mcf7.json +0 -0
  115. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/tracking_configs/no_z_motion.json +0 -0
  116. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/tracking_configs/ricm.json +0 -0
  117. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/models/tracking_configs/ricm2.json +0 -0
  118. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/napari/__init__.py +0 -0
  119. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/napari/utils.py +0 -0
  120. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/neighborhood.py +0 -0
  121. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/preprocessing.py +0 -0
  122. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/__init__.py +0 -0
  123. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/background_correction.py +0 -0
  124. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/compute_neighborhood.py +0 -0
  125. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/detect_events.py +0 -0
  126. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/downloader.py +0 -0
  127. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/load_table.py +0 -0
  128. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/measure_cells.py +0 -0
  129. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/segment_cells.py +0 -0
  130. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/track_cells.py +0 -0
  131. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/train_segmentation_model.py +0 -0
  132. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/train_signal_model.py +0 -0
  133. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/processes/unified_process.py +0 -0
  134. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/regionprops/__init__.py +0 -0
  135. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/regionprops/_regionprops.py +0 -0
  136. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/regionprops/props.json +0 -0
  137. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/relative_measurements.py +0 -0
  138. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/analyze_signals.py +0 -0
  139. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/measure_cells.py +0 -0
  140. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/measure_relative.py +0 -0
  141. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/segment_cells.py +0 -0
  142. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/segment_cells_thresholds.py +0 -0
  143. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/track_cells.py +0 -0
  144. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/train_segmentation_model.py +0 -0
  145. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/scripts/train_signal_model.py +0 -0
  146. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/segmentation.py +0 -0
  147. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/signals.py +0 -0
  148. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/tracking.py +0 -0
  149. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/__init__.py +0 -0
  150. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/cellpose_utils/__init__.py +0 -0
  151. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/color_mappings.py +0 -0
  152. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/data_cleaning.py +0 -0
  153. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/data_loaders.py +0 -0
  154. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/dataset_helpers.py +0 -0
  155. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/downloaders.py +0 -0
  156. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/event_detection/__init__.py +0 -0
  157. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/experiment.py +0 -0
  158. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/image_augmenters.py +0 -0
  159. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/image_cleaning.py +0 -0
  160. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/image_loaders.py +0 -0
  161. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/image_transforms.py +0 -0
  162. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/io.py +0 -0
  163. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/mask_cleaning.py +0 -0
  164. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/mask_transforms.py +0 -0
  165. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/masks.py +0 -0
  166. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/maths.py +0 -0
  167. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/model_getters.py +0 -0
  168. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/model_loaders.py +0 -0
  169. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/normalization.py +0 -0
  170. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/parsing.py +0 -0
  171. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/plots/__init__.py +0 -0
  172. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/plots/regression.py +0 -0
  173. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/resources.py +0 -0
  174. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/stardist_utils/__init__.py +0 -0
  175. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/stats.py +0 -0
  176. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective/utils/types.py +0 -0
  177. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/dependency_links.txt +0 -0
  178. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/entry_points.txt +0 -0
  179. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/not-zip-safe +0 -0
  180. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/requires.txt +0 -0
  181. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/celldetective.egg-info/top_level.txt +0 -0
  182. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/setup.cfg +0 -0
  183. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/setup.py +0 -0
  184. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/__init__.py +0 -0
  185. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/__init__.py +0 -0
  186. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_enhancements.py +0 -0
  187. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_event_annotator_cleanup.py +0 -0
  188. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_measure_annotator_bugfix.py +0 -0
  189. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_new_project.py +0 -0
  190. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_project.py +0 -0
  191. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/gui/test_spot_detection_viewer.py +0 -0
  192. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_cellpose_fallback.py +0 -0
  193. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_contour_format.py +0 -0
  194. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_events.py +0 -0
  195. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_filters.py +0 -0
  196. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_io.py +0 -0
  197. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_measure.py +0 -0
  198. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_neighborhood.py +0 -0
  199. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_notebooks.py +0 -0
  200. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_partial_install.py +0 -0
  201. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_preprocessing.py +0 -0
  202. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_segmentation.py +0 -0
  203. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_signals.py +0 -0
  204. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_tracking.py +0 -0
  205. {celldetective-1.5.0b11 → celldetective-1.5.0b12}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: celldetective
3
- Version: 1.5.0b11
3
+ Version: 1.5.0b12
4
4
  Summary: description
5
5
  Home-page: http://github.com/remyeltorro/celldetective
6
6
  Author: Rémy Torro
@@ -0,0 +1 @@
1
+ __version__ = "1.5.0b12"
@@ -1347,10 +1347,9 @@ class TableUI(CelldetectiveMainWindow):
1347
1347
  if self.projection_option.isChecked():
1348
1348
 
1349
1349
  self.projection_mode = self.projection_op_cb.currentText()
1350
- op = getattr(
1350
+ group_table = getattr(
1351
1351
  self.current_data.groupby(self.groupby_cols), self.projection_mode
1352
- )
1353
- group_table = op(self.current_data.groupby(self.groupby_cols))
1352
+ )(numeric_only=True)
1354
1353
 
1355
1354
  for c in self.static_columns:
1356
1355
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: celldetective
3
- Version: 1.5.0b11
3
+ Version: 1.5.0b12
4
4
  Summary: description
5
5
  Home-page: http://github.com/remyeltorro/celldetective
6
6
  Author: Rémy Torro
@@ -198,4 +198,5 @@ tests/gui/test_event_annotator_cleanup.py
198
198
  tests/gui/test_measure_annotator_bugfix.py
199
199
  tests/gui/test_new_project.py
200
200
  tests/gui/test_project.py
201
- tests/gui/test_spot_detection_viewer.py
201
+ tests/gui/test_spot_detection_viewer.py
202
+ tests/gui/test_tableui_track_collapse.py
@@ -0,0 +1,239 @@
1
+ """
2
+ Regression test for TableUI track collapse functionality.
3
+ Tests the fix for ValueError: numeric_only accepts only Boolean values
4
+ when using groupby aggregation methods (mean, sum, etc.) in set_proj_mode.
5
+ """
6
+
7
+ import pytest
8
+ import pandas as pd
9
+ import numpy as np
10
+ import logging
11
+ from PyQt5 import QtCore
12
+
13
+ from celldetective.gui.tableUI import TableUI
14
+
15
+
16
+ @pytest.fixture(autouse=True)
17
+ def disable_logging():
18
+ """Disable all logging to avoid Windows OSError with pytest capture."""
19
+ logger = logging.getLogger()
20
+ try:
21
+ logging.disable(logging.CRITICAL)
22
+ yield
23
+ finally:
24
+ logging.disable(logging.NOTSET)
25
+
26
+
27
+ @pytest.fixture
28
+ def sample_track_data():
29
+ """Create sample DataFrame with track data for testing."""
30
+ return pd.DataFrame(
31
+ {
32
+ "position": ["pos1"] * 6 + ["pos2"] * 6,
33
+ "TRACK_ID": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
34
+ "FRAME": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
35
+ "POSITION_X": [
36
+ 10.0,
37
+ 12.0,
38
+ 14.0,
39
+ 20.0,
40
+ 22.0,
41
+ 24.0,
42
+ 30.0,
43
+ 32.0,
44
+ 34.0,
45
+ 40.0,
46
+ 42.0,
47
+ 44.0,
48
+ ],
49
+ "POSITION_Y": [
50
+ 10.0,
51
+ 12.0,
52
+ 14.0,
53
+ 20.0,
54
+ 22.0,
55
+ 24.0,
56
+ 30.0,
57
+ 32.0,
58
+ 34.0,
59
+ 40.0,
60
+ 42.0,
61
+ 44.0,
62
+ ],
63
+ "area": [
64
+ 100.0,
65
+ 110.0,
66
+ 120.0,
67
+ 200.0,
68
+ 210.0,
69
+ 220.0,
70
+ 300.0,
71
+ 310.0,
72
+ 320.0,
73
+ 400.0,
74
+ 410.0,
75
+ 420.0,
76
+ ],
77
+ "intensity": [
78
+ 50.0,
79
+ 55.0,
80
+ 60.0,
81
+ 70.0,
82
+ 75.0,
83
+ 80.0,
84
+ 90.0,
85
+ 95.0,
86
+ 100.0,
87
+ 110.0,
88
+ 115.0,
89
+ 120.0,
90
+ ],
91
+ # Non-numeric columns to ensure numeric_only=True works
92
+ "well_name": ["W1"] * 12,
93
+ "pos_name": ["100"] * 6 + ["200"] * 6,
94
+ "status": [0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1],
95
+ }
96
+ )
97
+
98
+
99
+ def test_tableui_track_collapse_mean(qtbot, sample_track_data):
100
+ """
101
+ Test that collapsing tracks with 'mean' operation works without ValueError.
102
+ This is a regression test for the fix: numeric_only=True in groupby aggregation.
103
+ """
104
+ table_ui = TableUI(
105
+ data=sample_track_data,
106
+ title="Test Table",
107
+ population="targets",
108
+ plot_mode="plot_track_signals",
109
+ collapse_tracks_option=True,
110
+ )
111
+ qtbot.addWidget(table_ui)
112
+ table_ui.show()
113
+ qtbot.wait(100)
114
+
115
+ # Open the projection mode dialog
116
+ table_ui.set_projection_mode_tracks()
117
+ qtbot.wait(100)
118
+
119
+ # Set up projection parameters - mean is the default
120
+ assert table_ui.projection_option.isChecked()
121
+ table_ui.projection_op_cb.setCurrentText("mean")
122
+ table_ui.current_data = sample_track_data
123
+
124
+ # Execute the collapse - this should NOT raise ValueError
125
+ try:
126
+ table_ui.set_proj_mode()
127
+ qtbot.wait(100)
128
+ except ValueError as e:
129
+ if "numeric_only" in str(e):
130
+ pytest.fail(f"Regression: numeric_only ValueError occurred: {e}")
131
+ raise
132
+
133
+ # Verify subtable was created
134
+ assert hasattr(table_ui, "subtable")
135
+ assert table_ui.subtable is not None
136
+
137
+ # Cleanup
138
+ table_ui.subtable.close()
139
+ table_ui.close()
140
+
141
+
142
+ def test_tableui_track_collapse_all_operations(qtbot, sample_track_data):
143
+ """
144
+ Test that all aggregation operations work in track collapse without ValueError.
145
+ Operations tested: mean, median, min, max, first, last, prod, sum
146
+ """
147
+ operations = ["mean", "median", "min", "max", "first", "last", "prod", "sum"]
148
+
149
+ for op in operations:
150
+ table_ui = TableUI(
151
+ data=sample_track_data.copy(),
152
+ title=f"Test Table - {op}",
153
+ population="targets",
154
+ plot_mode="plot_track_signals",
155
+ collapse_tracks_option=True,
156
+ )
157
+ qtbot.addWidget(table_ui)
158
+ table_ui.show()
159
+ qtbot.wait(50)
160
+
161
+ # Open the projection mode dialog
162
+ table_ui.set_projection_mode_tracks()
163
+ qtbot.wait(50)
164
+
165
+ # Configure for the current operation
166
+ table_ui.projection_option.setChecked(True)
167
+ table_ui.projection_op_cb.setCurrentText(op)
168
+ table_ui.current_data = sample_track_data.copy()
169
+
170
+ # Execute the collapse
171
+ try:
172
+ table_ui.set_proj_mode()
173
+ qtbot.wait(50)
174
+ except ValueError as e:
175
+ if "numeric_only" in str(e):
176
+ pytest.fail(
177
+ f"Regression: numeric_only ValueError occurred for '{op}': {e}"
178
+ )
179
+ raise
180
+
181
+ # Verify subtable was created
182
+ assert hasattr(table_ui, "subtable"), f"subtable not created for '{op}'"
183
+ assert table_ui.subtable is not None, f"subtable is None for '{op}'"
184
+
185
+ # Cleanup
186
+ table_ui.subtable.close()
187
+ table_ui.close()
188
+
189
+
190
+ def test_tableui_track_collapse_with_mixed_dtypes(qtbot):
191
+ """
192
+ Test track collapse with a DataFrame containing mixed data types.
193
+ Ensures numeric_only=True properly handles non-numeric columns.
194
+ """
195
+ mixed_data = pd.DataFrame(
196
+ {
197
+ "position": ["pos1"] * 4,
198
+ "TRACK_ID": [1, 1, 2, 2],
199
+ "FRAME": [0, 1, 0, 1],
200
+ "numeric_col": [1.5, 2.5, 3.5, 4.5],
201
+ "string_col": ["a", "b", "c", "d"],
202
+ "bool_col": [True, False, True, False],
203
+ "category_col": pd.Categorical(["cat1", "cat1", "cat2", "cat2"]),
204
+ }
205
+ )
206
+
207
+ table_ui = TableUI(
208
+ data=mixed_data,
209
+ title="Mixed Types Table",
210
+ population="targets",
211
+ plot_mode="plot_track_signals",
212
+ collapse_tracks_option=True,
213
+ )
214
+ qtbot.addWidget(table_ui)
215
+ table_ui.show()
216
+ qtbot.wait(100)
217
+
218
+ # Open the projection mode dialog
219
+ table_ui.set_projection_mode_tracks()
220
+ qtbot.wait(100)
221
+
222
+ table_ui.projection_option.setChecked(True)
223
+ table_ui.projection_op_cb.setCurrentText("mean")
224
+ table_ui.current_data = mixed_data
225
+
226
+ # This should not raise ValueError about numeric_only
227
+ try:
228
+ table_ui.set_proj_mode()
229
+ qtbot.wait(100)
230
+ except ValueError as e:
231
+ if "numeric_only" in str(e):
232
+ pytest.fail(f"Regression: numeric_only ValueError with mixed types: {e}")
233
+ raise
234
+
235
+ assert hasattr(table_ui, "subtable")
236
+
237
+ # Cleanup
238
+ table_ui.subtable.close()
239
+ table_ui.close()
@@ -1 +0,0 @@
1
- __version__ = "1.5.0b11"