spacr 0.9.4__tar.gz → 0.9.7__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 (534) hide show
  1. {spacr-0.9.4/spacr.egg-info → spacr-0.9.7}/PKG-INFO +2 -1
  2. {spacr-0.9.4 → spacr-0.9.7}/setup.py +2 -1
  3. {spacr-0.9.4 → spacr-0.9.7}/spacr/core.py +29 -43
  4. {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_core.py +97 -6
  5. {spacr-0.9.4 → spacr-0.9.7}/spacr/io.py +44 -0
  6. {spacr-0.9.4 → spacr-0.9.7}/spacr/plot.py +48 -1
  7. {spacr-0.9.4 → spacr-0.9.7}/spacr/settings.py +24 -7
  8. {spacr-0.9.4 → spacr-0.9.7}/spacr/spacr_cellpose.py +59 -0
  9. {spacr-0.9.4 → spacr-0.9.7}/spacr/utils.py +102 -3
  10. {spacr-0.9.4 → spacr-0.9.7/spacr.egg-info}/PKG-INFO +2 -1
  11. {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/requires.txt +1 -0
  12. {spacr-0.9.4 → spacr-0.9.7}/LICENSE +0 -0
  13. {spacr-0.9.4 → spacr-0.9.7}/MANIFEST.in +0 -0
  14. {spacr-0.9.4 → spacr-0.9.7}/README.rst +0 -0
  15. {spacr-0.9.4 → spacr-0.9.7}/deploy_docs.sh +0 -0
  16. {spacr-0.9.4 → spacr-0.9.7}/docs/.doctrees/environment.pickle +0 -0
  17. {spacr-0.9.4 → spacr-0.9.7}/docs/_images/logo_spacr.png +0 -0
  18. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/SetupDict.html +0 -0
  19. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/BasePredictor.html +0 -0
  20. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/BaseTrainer.html +0 -0
  21. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/Predictor.html +0 -0
  22. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/Trainer.html +0 -0
  23. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/Baseline/utils.html +0 -0
  24. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/EnsemblePredictor.html +0 -0
  25. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/Predictor.html +0 -0
  26. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/Trainer.html +0 -0
  27. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/MEDIAR/utils.html +0 -0
  28. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/core/utils.html +0 -0
  29. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/evaluate.html +0 -0
  30. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/generate_mapping.html +0 -0
  31. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/index.html +0 -0
  32. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/main.html +0 -0
  33. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/predict.html +0 -0
  34. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_annotate.html +0 -0
  35. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_classify.html +0 -0
  36. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_make_masks.html +0 -0
  37. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_mask.html +0 -0
  38. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_measure.html +0 -0
  39. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_sequencing.html +0 -0
  40. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/app_umap.html +0 -0
  41. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/chat_bot.html +0 -0
  42. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/core.html +0 -0
  43. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/deep_spacr.html +0 -0
  44. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui.html +0 -0
  45. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_core.html +0 -0
  46. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_elements.html +0 -0
  47. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/gui_utils.html +0 -0
  48. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/io.html +0 -0
  49. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/logger.html +0 -0
  50. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/measure.html +0 -0
  51. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/mediar.html +0 -0
  52. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/ml.html +0 -0
  53. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/plot.html +0 -0
  54. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sequencing.html +0 -0
  55. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/settings.html +0 -0
  56. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sim.html +0 -0
  57. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/sp_stats.html +0 -0
  58. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/spacr_cellpose.html +0 -0
  59. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/submodules.html +0 -0
  60. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/timelapse.html +0 -0
  61. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/toxo.html +0 -0
  62. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/utils.html +0 -0
  63. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/spacr/version.html +0 -0
  64. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/CellAware.html +0 -0
  65. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/LoadImage.html +0 -0
  66. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/custom/NormalizeImage.html +0 -0
  67. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/datasetter.html +0 -0
  68. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/transforms.html +0 -0
  69. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/data_utils/utils.html +0 -0
  70. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/measures.html +0 -0
  71. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/models/MEDIARFormer.html +0 -0
  72. {spacr-0.9.4 → spacr-0.9.7}/docs/_modules/train_tools/utils.html +0 -0
  73. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/SetupDict/index.rst.txt +0 -0
  74. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/BasePredictor/index.rst.txt +0 -0
  75. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/BaseTrainer/index.rst.txt +0 -0
  76. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/Predictor/index.rst.txt +0 -0
  77. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/Trainer/index.rst.txt +0 -0
  78. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/index.rst.txt +0 -0
  79. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/Baseline/utils/index.rst.txt +0 -0
  80. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/EnsemblePredictor/index.rst.txt +0 -0
  81. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/Predictor/index.rst.txt +0 -0
  82. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/Trainer/index.rst.txt +0 -0
  83. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/index.rst.txt +0 -0
  84. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/MEDIAR/utils/index.rst.txt +0 -0
  85. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/index.rst.txt +0 -0
  86. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/core/utils/index.rst.txt +0 -0
  87. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/evaluate/index.rst.txt +0 -0
  88. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/generate_mapping/index.rst.txt +0 -0
  89. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/index.rst.txt +0 -0
  90. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/main/index.rst.txt +0 -0
  91. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/predict/index.rst.txt +0 -0
  92. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_annotate/index.rst.txt +0 -0
  93. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_classify/index.rst.txt +0 -0
  94. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_make_masks/index.rst.txt +0 -0
  95. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_mask/index.rst.txt +0 -0
  96. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_measure/index.rst.txt +0 -0
  97. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_sequencing/index.rst.txt +0 -0
  98. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/app_umap/index.rst.txt +0 -0
  99. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/chat_bot/index.rst.txt +0 -0
  100. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/core/index.rst.txt +0 -0
  101. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/deep_spacr/index.rst.txt +0 -0
  102. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui/index.rst.txt +0 -0
  103. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_core/index.rst.txt +0 -0
  104. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_elements/index.rst.txt +0 -0
  105. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/gui_utils/index.rst.txt +0 -0
  106. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/index.rst.txt +0 -0
  107. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/io/index.rst.txt +0 -0
  108. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/logger/index.rst.txt +0 -0
  109. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/measure/index.rst.txt +0 -0
  110. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/mediar/index.rst.txt +0 -0
  111. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/ml/index.rst.txt +0 -0
  112. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/openai/index.rst.txt +0 -0
  113. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/plot/index.rst.txt +0 -0
  114. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sequencing/index.rst.txt +0 -0
  115. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/settings/index.rst.txt +0 -0
  116. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sim/index.rst.txt +0 -0
  117. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/sp_stats/index.rst.txt +0 -0
  118. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/spacr_cellpose/index.rst.txt +0 -0
  119. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/submodules/index.rst.txt +0 -0
  120. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/timelapse/index.rst.txt +0 -0
  121. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/toxo/index.rst.txt +0 -0
  122. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/utils/index.rst.txt +0 -0
  123. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/spacr/version/index.rst.txt +0 -0
  124. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/CellAware/index.rst.txt +0 -0
  125. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/LoadImage/index.rst.txt +0 -0
  126. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/NormalizeImage/index.rst.txt +0 -0
  127. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/custom/index.rst.txt +0 -0
  128. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/datasetter/index.rst.txt +0 -0
  129. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/index.rst.txt +0 -0
  130. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/transforms/index.rst.txt +0 -0
  131. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/data_utils/utils/index.rst.txt +0 -0
  132. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/index.rst.txt +0 -0
  133. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/measures/index.rst.txt +0 -0
  134. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/models/MEDIARFormer/index.rst.txt +0 -0
  135. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/models/index.rst.txt +0 -0
  136. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/api/train_tools/utils/index.rst.txt +0 -0
  137. {spacr-0.9.4 → spacr-0.9.7}/docs/_sources/index.rst.txt +0 -0
  138. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/basic.css +0 -0
  139. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/badge_only.css +0 -0
  140. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  141. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  142. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  143. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  144. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.eot +0 -0
  145. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.svg +0 -0
  146. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  147. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.woff +0 -0
  148. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  149. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold-italic.woff +0 -0
  150. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  151. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold.woff +0 -0
  152. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-bold.woff2 +0 -0
  153. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal-italic.woff +0 -0
  154. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  155. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal.woff +0 -0
  156. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/fonts/lato-normal.woff2 +0 -0
  157. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/css/theme.css +0 -0
  158. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/doctools.js +0 -0
  159. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/documentation_options.js +0 -0
  160. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/file.png +0 -0
  161. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.eot +0 -0
  162. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.ttf +0 -0
  163. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.woff +0 -0
  164. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bold.woff2 +0 -0
  165. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  166. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  167. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  168. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  169. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.eot +0 -0
  170. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.ttf +0 -0
  171. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.woff +0 -0
  172. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-italic.woff2 +0 -0
  173. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.eot +0 -0
  174. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.ttf +0 -0
  175. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.woff +0 -0
  176. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/Lato/lato-regular.woff2 +0 -0
  177. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  178. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  179. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  180. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  181. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  182. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  183. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  184. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  185. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/graphviz.css +0 -0
  186. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/badge_only.js +0 -0
  187. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/theme.js +0 -0
  188. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/js/versions.js +0 -0
  189. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/language_data.js +0 -0
  190. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/logo_spacr.png +0 -0
  191. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/minus.png +0 -0
  192. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/plus.png +0 -0
  193. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/pygments.css +0 -0
  194. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/searchtools.js +0 -0
  195. {spacr-0.9.4 → spacr-0.9.7}/docs/_static/sphinx_highlight.js +0 -0
  196. {spacr-0.9.4 → spacr-0.9.7}/docs/api/SetupDict/index.html +0 -0
  197. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/BasePredictor/index.html +0 -0
  198. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/BaseTrainer/index.html +0 -0
  199. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/Predictor/index.html +0 -0
  200. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/Trainer/index.html +0 -0
  201. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/index.html +0 -0
  202. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/Baseline/utils/index.html +0 -0
  203. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/EnsemblePredictor/index.html +0 -0
  204. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/Predictor/index.html +0 -0
  205. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/Trainer/index.html +0 -0
  206. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/index.html +0 -0
  207. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/MEDIAR/utils/index.html +0 -0
  208. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/index.html +0 -0
  209. {spacr-0.9.4 → spacr-0.9.7}/docs/api/core/utils/index.html +0 -0
  210. {spacr-0.9.4 → spacr-0.9.7}/docs/api/evaluate/index.html +0 -0
  211. {spacr-0.9.4 → spacr-0.9.7}/docs/api/generate_mapping/index.html +0 -0
  212. {spacr-0.9.4 → spacr-0.9.7}/docs/api/index.html +0 -0
  213. {spacr-0.9.4 → spacr-0.9.7}/docs/api/main/index.html +0 -0
  214. {spacr-0.9.4 → spacr-0.9.7}/docs/api/predict/index.html +0 -0
  215. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_annotate/index.html +0 -0
  216. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_classify/index.html +0 -0
  217. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_make_masks/index.html +0 -0
  218. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_mask/index.html +0 -0
  219. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_measure/index.html +0 -0
  220. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_sequencing/index.html +0 -0
  221. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/app_umap/index.html +0 -0
  222. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/chat_bot/index.html +0 -0
  223. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/core/index.html +0 -0
  224. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/deep_spacr/index.html +0 -0
  225. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui/index.html +0 -0
  226. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_core/index.html +0 -0
  227. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_elements/index.html +0 -0
  228. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/gui_utils/index.html +0 -0
  229. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/index.html +0 -0
  230. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/io/index.html +0 -0
  231. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/logger/index.html +0 -0
  232. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/measure/index.html +0 -0
  233. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/mediar/index.html +0 -0
  234. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/ml/index.html +0 -0
  235. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/openai/index.html +0 -0
  236. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/plot/index.html +0 -0
  237. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sequencing/index.html +0 -0
  238. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/settings/index.html +0 -0
  239. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sim/index.html +0 -0
  240. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/sp_stats/index.html +0 -0
  241. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/spacr_cellpose/index.html +0 -0
  242. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/submodules/index.html +0 -0
  243. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/timelapse/index.html +0 -0
  244. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/toxo/index.html +0 -0
  245. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/utils/index.html +0 -0
  246. {spacr-0.9.4 → spacr-0.9.7}/docs/api/spacr/version/index.html +0 -0
  247. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/CellAware/index.html +0 -0
  248. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/LoadImage/index.html +0 -0
  249. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/NormalizeImage/index.html +0 -0
  250. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/custom/index.html +0 -0
  251. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/datasetter/index.html +0 -0
  252. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/index.html +0 -0
  253. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/transforms/index.html +0 -0
  254. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/data_utils/utils/index.html +0 -0
  255. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/index.html +0 -0
  256. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/measures/index.html +0 -0
  257. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/models/MEDIARFormer/index.html +0 -0
  258. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/models/index.html +0 -0
  259. {spacr-0.9.4 → spacr-0.9.7}/docs/api/train_tools/utils/index.html +0 -0
  260. {spacr-0.9.4 → spacr-0.9.7}/docs/genindex.html +0 -0
  261. {spacr-0.9.4 → spacr-0.9.7}/docs/index.html +0 -0
  262. {spacr-0.9.4 → spacr-0.9.7}/docs/objects.inv +0 -0
  263. {spacr-0.9.4 → spacr-0.9.7}/docs/py-modindex.html +0 -0
  264. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OFL.txt +0 -0
  265. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  266. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  267. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/README.txt +0 -0
  268. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  269. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  270. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  271. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  272. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  273. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  274. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  275. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  276. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  277. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  278. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  279. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  280. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  281. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  282. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  283. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  284. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  285. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  286. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  287. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  288. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  289. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  290. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  291. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  292. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  293. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  294. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  295. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  296. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  297. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  298. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  299. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  300. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  301. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  302. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  303. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  304. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/abort.png +0 -0
  305. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/classify.png +0 -0
  306. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/default.png +0 -0
  307. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/download.png +0 -0
  308. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/map_barcodes.png +0 -0
  309. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/mask.png +0 -0
  310. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/measure.png +0 -0
  311. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/regression.png +0 -0
  312. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/run.png +0 -0
  313. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/icons/settings.png +0 -0
  314. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/001_placeholder.png +0 -0
  315. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/002_placeholder.png +0 -0
  316. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/003_placeholder.png +0 -0
  317. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/004_placeholder.png +0 -0
  318. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-03-41.png +0 -0
  319. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-07-50.png +0 -0
  320. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-06.png +0 -0
  321. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-19.png +0 -0
  322. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-37.png +0 -0
  323. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-08-55.png +0 -0
  324. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-03.png +0 -0
  325. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-20.png +0 -0
  326. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-34.png +0 -0
  327. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-43.png +0 -0
  328. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-09-56.png +0 -0
  329. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-10-25.png +0 -0
  330. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-04.png +0 -0
  331. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-11.png +0 -0
  332. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-18.png +0 -0
  333. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/Screenshot from 2025-06-25 22-11-27.png +0 -0
  334. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/gui/gui.png +0 -0
  335. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_00_code.txt +0 -0
  336. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_code.txt +0 -0
  337. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_00_text.txt +0 -0
  338. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_02_text.txt +0 -0
  339. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_04_text.txt +0 -0
  340. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_06_text.txt +0 -0
  341. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_08_text.txt +0 -0
  342. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_19_text.txt +0 -0
  343. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_21_text.txt +0 -0
  344. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_23_text.txt +0 -0
  345. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_34_text.txt +0 -0
  346. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_36_text.txt +0 -0
  347. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_38_text.txt +0 -0
  348. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_49_text.txt +0 -0
  349. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_51_text.txt +0 -0
  350. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_53_text.txt +0 -0
  351. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_55_text.txt +0 -0
  352. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_57_text.txt +0 -0
  353. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_59_text.txt +0 -0
  354. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_61_text.txt +0 -0
  355. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_63_text.txt +0 -0
  356. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_65_text.txt +0 -0
  357. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_67_text.txt +0 -0
  358. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_01_out_69_text.txt +0 -0
  359. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/cell_02_code.txt +0 -0
  360. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/console_output.js +0 -0
  361. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/console_output.txt +0 -0
  362. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img1.png +0 -0
  363. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img2.png +0 -0
  364. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img3.png +0 -0
  365. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img4.png +0 -0
  366. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/1_mask/notebook/img5.png +0 -0
  367. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/001_placeholder.png +0 -0
  368. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/002_placeholder.png +0 -0
  369. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/003_placeholder.png +0 -0
  370. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/gui/004_placeholder.png +0 -0
  371. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_00_code.txt +0 -0
  372. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_code.txt +0 -0
  373. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_00_text.txt +0 -0
  374. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_02_text.txt +0 -0
  375. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_04_text.txt +0 -0
  376. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_10_text.txt +0 -0
  377. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_16_text.txt +0 -0
  378. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_22_text.txt +0 -0
  379. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_28_text.txt +0 -0
  380. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_34_text.txt +0 -0
  381. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_40_text.txt +0 -0
  382. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_46_text.txt +0 -0
  383. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_52_text.txt +0 -0
  384. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_58_text.txt +0 -0
  385. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_01_out_64_text.txt +0 -0
  386. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/2_spacr_generate_mesurments_crop_images-ipynb/cell_02_code.txt +0 -0
  387. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img1.png +0 -0
  388. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img2.png +0 -0
  389. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/2_measure/notebook/img3.png +0 -0
  390. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/001_placeholder.png +0 -0
  391. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/002_placeholder.png +0 -0
  392. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/003_placeholder.png +0 -0
  393. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/gui/004_placeholder.png +0 -0
  394. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img1.png +0 -0
  395. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img2.png +0 -0
  396. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img3.png +0 -0
  397. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img4.png +0 -0
  398. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/3_classify/notebook/img5.png +0 -0
  399. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/001_placeholder.png +0 -0
  400. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/002_placeholder.png +0 -0
  401. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/003_placeholder.png +0 -0
  402. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/gui/004_placeholder.png +0 -0
  403. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img1.png +0 -0
  404. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img2.png +0 -0
  405. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img3.png +0 -0
  406. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img4.png +0 -0
  407. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/4_map_barcodes/notebook/img5.png +0 -0
  408. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/001_placeholder.png +0 -0
  409. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/002_placeholder.png +0 -0
  410. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/003_placeholder.png +0 -0
  411. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/gui/004_placeholder.png +0 -0
  412. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img1.png +0 -0
  413. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img2.png +0 -0
  414. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img3.png +0 -0
  415. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img4.png +0 -0
  416. {spacr-0.9.4 → spacr-0.9.7}/docs/resources/tutorial/5_regression/notebook/img5.png +0 -0
  417. {spacr-0.9.4 → spacr-0.9.7}/docs/search.html +0 -0
  418. {spacr-0.9.4 → spacr-0.9.7}/docs/searchindex.js +0 -0
  419. {spacr-0.9.4 → spacr-0.9.7}/docs/source/_static/custom.css +0 -0
  420. {spacr-0.9.4 → spacr-0.9.7}/docs/source/_static/logo_spacr.png +0 -0
  421. {spacr-0.9.4 → spacr-0.9.7}/docs/source/conf.py +0 -0
  422. {spacr-0.9.4 → spacr-0.9.7}/docs/source/index.rst +0 -0
  423. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/1_mask_gen_gui.html +0 -0
  424. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/1_mask_gen_notebook.html +0 -0
  425. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/2_measure_gui.html +0 -0
  426. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/2_measure_notebook.html +0 -0
  427. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/3_classify_gui.html +0 -0
  428. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/3_classify_notebook.html +0 -0
  429. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/4_map_barcodes_gui.html +0 -0
  430. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/4_map_barcodes_notebook.html +0 -0
  431. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/5_regression_gui.html +0 -0
  432. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/5_regression_notebook.html +0 -0
  433. {spacr-0.9.4 → spacr-0.9.7}/docs/tutorial/index.html +0 -0
  434. {spacr-0.9.4 → spacr-0.9.7}/environment.yaml +0 -0
  435. {spacr-0.9.4 → spacr-0.9.7}/fonts/OpenSans-Regular.ttf +0 -0
  436. {spacr-0.9.4 → spacr-0.9.7}/requirements.txt +0 -0
  437. {spacr-0.9.4 → spacr-0.9.7}/rtd_trigger.txt +0 -0
  438. {spacr-0.9.4 → spacr-0.9.7}/setup.cfg +0 -0
  439. {spacr-0.9.4 → spacr-0.9.7}/setup_docs.sh +0 -0
  440. {spacr-0.9.4 → spacr-0.9.7}/spacr/__init__.py +0 -0
  441. {spacr-0.9.4 → spacr-0.9.7}/spacr/__main__.py +0 -0
  442. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_annotate.py +0 -0
  443. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_classify.py +0 -0
  444. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_make_masks.py +0 -0
  445. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_mask.py +0 -0
  446. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_measure.py +0 -0
  447. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_sequencing.py +0 -0
  448. {spacr-0.9.4 → spacr-0.9.7}/spacr/app_umap.py +0 -0
  449. {spacr-0.9.4 → spacr-0.9.7}/spacr/chat_bot.py +0 -0
  450. {spacr-0.9.4 → spacr-0.9.7}/spacr/deep_spacr.py +0 -0
  451. {spacr-0.9.4 → spacr-0.9.7}/spacr/gui.py +0 -0
  452. {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_elements.py +0 -0
  453. {spacr-0.9.4 → spacr-0.9.7}/spacr/gui_utils.py +0 -0
  454. {spacr-0.9.4 → spacr-0.9.7}/spacr/logger.py +0 -0
  455. {spacr-0.9.4 → spacr-0.9.7}/spacr/measure.py +0 -0
  456. {spacr-0.9.4 → spacr-0.9.7}/spacr/ml.py +0 -0
  457. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/data/lopit.csv +0 -0
  458. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/data/toxoplasma_metadata.csv +0 -0
  459. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OFL.txt +0 -0
  460. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  461. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  462. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/README.txt +0 -0
  463. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  464. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  465. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  466. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  467. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  468. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  469. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  470. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  471. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  472. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  473. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  474. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  475. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  476. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  477. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  478. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  479. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  480. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  481. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  482. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  483. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  484. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  485. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  486. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  487. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  488. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  489. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  490. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  491. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  492. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  493. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  494. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  495. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  496. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  497. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  498. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  499. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/abort.png +0 -0
  500. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/annotate.png +0 -0
  501. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/cellpose_all.png +0 -0
  502. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/cellpose_masks.png +0 -0
  503. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/classify.png +0 -0
  504. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/convert.png +0 -0
  505. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/default.png +0 -0
  506. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/download.png +0 -0
  507. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/flow_chart_v3.png +0 -0
  508. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo.pdf +0 -0
  509. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo_spacr.png +0 -0
  510. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/logo_spacr_1.png +0 -0
  511. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/make_masks.png +0 -0
  512. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/map_barcodes.png +0 -0
  513. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/mask.png +0 -0
  514. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/measure.png +0 -0
  515. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/ml_analyze.png +0 -0
  516. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/plaque.png +0 -0
  517. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/recruitment.png +0 -0
  518. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/regression.png +0 -0
  519. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/run.png +0 -0
  520. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/sequencing.png +0 -0
  521. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/settings.png +0 -0
  522. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/train_cellpose.png +0 -0
  523. {spacr-0.9.4 → spacr-0.9.7}/spacr/resources/icons/umap.png +0 -0
  524. {spacr-0.9.4 → spacr-0.9.7}/spacr/sequencing.py +0 -0
  525. {spacr-0.9.4 → spacr-0.9.7}/spacr/sim.py +0 -0
  526. {spacr-0.9.4 → spacr-0.9.7}/spacr/sp_stats.py +0 -0
  527. {spacr-0.9.4 → spacr-0.9.7}/spacr/submodules.py +0 -0
  528. {spacr-0.9.4 → spacr-0.9.7}/spacr/timelapse.py +0 -0
  529. {spacr-0.9.4 → spacr-0.9.7}/spacr/toxo.py +0 -0
  530. {spacr-0.9.4 → spacr-0.9.7}/spacr/version.py +0 -0
  531. {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/SOURCES.txt +0 -0
  532. {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/dependency_links.txt +0 -0
  533. {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/entry_points.txt +0 -0
  534. {spacr-0.9.4 → spacr-0.9.7}/spacr.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.9.4
3
+ Version: 0.9.7
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
@@ -14,6 +14,7 @@ Requires-Dist: numpy<2.0,>=1.26.4
14
14
  Requires-Dist: pandas<3.0,>=2.2.1
15
15
  Requires-Dist: scipy<2.0,>=1.12.0
16
16
  Requires-Dist: cellpose<5.0,>=4.0
17
+ Requires-Dist: segment-anything
17
18
  Requires-Dist: scikit-image<1.0,>=0.22.0
18
19
  Requires-Dist: scikit-learn<2.0,>=1.4.1
19
20
  Requires-Dist: scikit-posthocs<0.20,>=0.10.0
@@ -10,6 +10,7 @@ dependencies = [
10
10
  'pandas>=2.2.1,<3.0',
11
11
  'scipy>=1.12.0,<2.0',
12
12
  'cellpose>=4.0,<5.0', # changed max to 5 from 4 3.0.6
13
+ 'segment-anything',
13
14
  'scikit-image>=0.22.0,<1.0',
14
15
  'scikit-learn>=1.4.1,<2.0',
15
16
  'scikit-posthocs>=0.10.0, <0.20',
@@ -71,7 +72,7 @@ dependencies = [
71
72
  'huggingface-hub>=0.24.0,<0.25'
72
73
  ]
73
74
 
74
- VERSION = "0.9.4"
75
+ VERSION = "0.9.7"
75
76
 
76
77
  setup(
77
78
  name="spacr",
@@ -196,11 +196,12 @@ def preprocess_generate_masks(settings):
196
196
 
197
197
  def generate_cellpose_masks(src, settings, object_type):
198
198
 
199
- from .utils import _masks_to_masks_stack, _filter_cp_masks, _get_cellpose_batch_size, _get_cellpose_channels, _choose_model, mask_object_count, all_elements_match, prepare_batch_for_segmentation
199
+ from .utils import _masks_to_masks_stack, _filter_cp_masks, _get_cellpose_batch_size, _get_cellpose_channels, _choose_model, all_elements_match, prepare_batch_for_segmentation
200
200
  from .io import _create_database, _save_object_counts_to_database, _check_masks, _get_avg_object_size
201
201
  from .timelapse import _npz_to_movie, _btrack_track_cells, _trackpy_track_cells
202
- from .plot import plot_masks
202
+ from .plot import plot_cellpose4_output
203
203
  from .settings import set_default_settings_preprocess_generate_masks, _get_object_settings
204
+ from .spacr_cellpose import parse_cellpose4_output
204
205
 
205
206
  gc.collect()
206
207
  if not torch.cuda.is_available():
@@ -239,9 +240,12 @@ def generate_cellpose_masks(src, settings, object_type):
239
240
  cellpose_channels = _get_cellpose_channels(src, settings['nucleus_channel'], settings['pathogen_channel'], settings['cell_channel'])
240
241
  if settings['verbose']:
241
242
  print(cellpose_channels)
242
-
243
+
244
+ if object_type not in cellpose_channels:
245
+ raise ValueError(f"Error: No channels were specified for object_type '{object_type}'. Check your settings.")
243
246
  channels = cellpose_channels[object_type]
244
- cellpose_batch_size = _get_cellpose_batch_size()
247
+
248
+ #cellpose_batch_size = _get_cellpose_batch_size()
245
249
  device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
246
250
 
247
251
  if object_type == 'pathogen' and not settings['pathogen_model'] is None:
@@ -249,7 +253,8 @@ def generate_cellpose_masks(src, settings, object_type):
249
253
 
250
254
  model = _choose_model(model_name, device, object_type=object_type, restore_type=None, object_settings=object_settings)
251
255
 
252
- chans = [2, 1] if model_name == 'cyto2' else [0,0] if model_name == 'nucleus' else [2,0] if model_name == 'cyto' else [2, 0] if model_name == 'cyto3' else [2, 0]
256
+ #chans = [2, 1] if model_name == 'cyto2' else [0,0] if model_name == 'nucleus' else [2,0] if model_name == 'cyto' else [2, 0] if model_name == 'cyto3' else [2, 0]
257
+
253
258
  paths = [os.path.join(src, file) for file in os.listdir(src) if file.endswith('.npz')]
254
259
 
255
260
  count_loc = os.path.dirname(src)+'/measurements/measurements.db'
@@ -257,6 +262,7 @@ def generate_cellpose_masks(src, settings, object_type):
257
262
  _create_database(count_loc)
258
263
 
259
264
  average_sizes = []
265
+ average_count = []
260
266
  time_ls = []
261
267
 
262
268
  for file_index, path in enumerate(paths):
@@ -310,49 +316,30 @@ def generate_cellpose_masks(src, settings, object_type):
310
316
  continue
311
317
 
312
318
  batch = prepare_batch_for_segmentation(batch)
313
-
314
-
315
- #if settings['denoise']:
316
- # if object_type == 'cell':
317
- # model_type = "denoise_cyto3"
318
- # elif object_type == 'nucleus':
319
- # model_type = "denoise_nucleus"
320
- # else:
321
- # raise ValueError(f"No denoise model for object_type: {object_type}")
322
- # dn = denoise.DenoiseModel(model_type=model_type, gpu=device)
323
- # batch = dn.eval(imgs=batch, channels=chans, diameter=object_settings['diameter'])
319
+ batch_list = [batch[i] for i in range(batch.shape[0])]
324
320
 
325
321
  if timelapse:
326
322
  movie_path = os.path.join(os.path.dirname(src), 'movies')
327
323
  os.makedirs(movie_path, exist_ok=True)
328
324
  save_path = os.path.join(movie_path, f'timelapse_{object_type}_{name}.mp4')
329
325
  _npz_to_movie(batch, batch_filenames, save_path, fps=2)
330
-
331
- output = model.eval(x=batch,
332
- batch_size=cellpose_batch_size,
326
+
327
+ output = model.eval(x=batch_list,
328
+ batch_size=batch_size,
333
329
  normalize=False,
334
- channels=chans,
335
- channel_axis=3,
330
+ channel_axis=-1,
331
+ channels=channels,
336
332
  diameter=object_settings['diameter'],
337
333
  flow_threshold=flow_threshold,
338
334
  cellprob_threshold=cellprob_threshold,
339
335
  rescale=None,
340
336
  resample=object_settings['resample'])
341
-
342
- if len(output) == 4:
343
- masks, flows, _, _ = output
344
- elif len(output) == 3:
345
- masks, flows, _ = output
346
- else:
347
- raise ValueError(f"Unexpected number of return values from model.eval(). Expected 3 or 4, got {len(output)}")
337
+
338
+ masks, flows, _, _, _ = parse_cellpose4_output(output)
348
339
 
349
340
  if timelapse:
350
341
  if settings['plot']:
351
- for idx, (mask, flow, image) in enumerate(zip(masks, flows[0], batch)):
352
- if idx == 0:
353
- num_objects = mask_object_count(mask)
354
- print(f'Number of objects: {num_objects}')
355
- plot_masks(batch=image, masks=mask, flows=flow, cmap='inferno', figuresize=figuresize, nr=1, file_type='.npz', print_object_number=True)
342
+ plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=1, print_object_number=True)
356
343
 
357
344
  _save_object_counts_to_database(masks, object_type, batch_filenames, count_loc, added_string='_timelapse')
358
345
  if object_type in timelapse_objects:
@@ -431,24 +418,23 @@ def generate_cellpose_masks(src, settings, object_type):
431
418
  mask_stack = _masks_to_masks_stack(masks)
432
419
 
433
420
  if settings['plot']:
434
- for idx, (mask, flow, image) in enumerate(zip(masks, flows[0], batch)):
435
- if idx == 0:
436
- num_objects = mask_object_count(mask)
437
- print(f'Number of objects, : {num_objects}')
438
- plot_masks(batch=image, masks=mask, flows=flow, cmap='inferno', figuresize=figuresize, nr=1, file_type='.npz', print_object_number=True)
421
+ plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=1, print_object_number=True)
439
422
 
440
423
  if not np.any(mask_stack):
441
- average_obj_size = 0
424
+ avg_num_objects_per_image, average_obj_size = 0, 0
442
425
  else:
443
- average_obj_size = _get_avg_object_size(mask_stack)
444
-
426
+ avg_num_objects_per_image, average_obj_size = _get_avg_object_size(mask_stack)
427
+
428
+ average_count.append(avg_num_objects_per_image)
445
429
  average_sizes.append(average_obj_size)
446
430
  overall_average_size = np.mean(average_sizes) if len(average_sizes) > 0 else 0
447
- print(f'object_size:{object_type}: {overall_average_size:.3f} px2')
431
+ overall_average_count = np.mean(average_count) if len(average_count) > 0 else 0
432
+ print(f'Found {overall_average_count} {object_type}/FOV. average size: {overall_average_size:.3f} px2')
448
433
 
449
434
  if not timelapse:
450
435
  if settings['plot']:
451
- plot_masks(batch, mask_stack, flows, figuresize=figuresize, cmap='inferno', nr=batch_size)
436
+ plot_cellpose4_output(batch_list, masks, flows, cmap='inferno', figuresize=figuresize, nr=batch_size)
437
+
452
438
  if settings['save']:
453
439
  for mask_index, mask in enumerate(mask_stack):
454
440
  output_filename = os.path.join(output_folder, batch_filenames[mask_index])
@@ -103,6 +103,11 @@ def display_figure(fig):
103
103
  new_canvas = FigureCanvasTkAgg(fig, master=canvas_widget.master)
104
104
  new_canvas.draw()
105
105
  new_canvas.get_tk_widget().grid(row=0, column=0, sticky="nsew")
106
+
107
+ # Store existing text labels on each axis for zoom visibility control (new feature)
108
+ for ax in fig.get_axes():
109
+ texts = ax.texts
110
+ ax._label_annotations = texts
106
111
 
107
112
  # Update the global canvas and canvas_widget references
108
113
  canvas = new_canvas
@@ -169,14 +174,100 @@ def display_figure(fig):
169
174
  else:
170
175
  #flash_feedback("right")
171
176
  show_next_figure()
177
+
178
+ def zoom(event):
179
+ # Define zoom factors
180
+ zoom_in_factor = 1 / 1.2
181
+ zoom_out_factor = 1.2
182
+
183
+ if event.num == 4 or (hasattr(event, 'delta') and event.delta > 0):
184
+ factor = zoom_in_factor
185
+ elif event.num == 5 or (hasattr(event, 'delta') and event.delta < 0):
186
+ factor = zoom_out_factor
187
+ else:
188
+ return
189
+
190
+ for ax in canvas.figure.get_axes():
191
+ # Convert canvas pixel (event.x, event.y) to axis data coordinates
192
+ # EVEN IF the mouse is over a different axis, we use the same pixel to data mapping for each
193
+ inv = ax.transData.inverted()
194
+ try:
195
+ data_x, data_y = inv.transform((event.x, event.y))
196
+ except ValueError:
197
+ continue # e.g. axis has no data
198
+
199
+ xlim = ax.get_xlim()
200
+ ylim = ax.get_ylim()
201
+
202
+ # Zoom around (data_x, data_y) in *that axis's* data space
203
+ new_xlim = [data_x - (data_x - xlim[0]) * factor,
204
+ data_x + (xlim[1] - data_x) * factor]
205
+ new_ylim = [data_y - (data_y - ylim[0]) * factor,
206
+ data_y + (ylim[1] - data_y) * factor]
207
+
208
+ ax.set_xlim(new_xlim)
209
+ ax.set_ylim(new_ylim)
210
+
211
+ # Clip text labels
212
+ for label in ax.texts:
213
+ label.set_clip_on(True)
214
+
215
+ # Update label visibility
216
+ if hasattr(ax, '_label_annotations'):
217
+ for label in ax._label_annotations:
218
+ x, y = label.get_position()
219
+ is_visible = (new_xlim[0] <= x <= new_xlim[1]) and (new_ylim[0] <= y <= new_ylim[1])
220
+ label.set_visible(is_visible)
221
+
222
+ canvas.draw_idle()
172
223
 
173
- def zoom_test(event):
174
- if event.num == 4: # Scroll up
175
- print("zoom in")
176
- elif event.num == 5: # Scroll down
177
- print("zoom out")
224
+ def zoom_v2(event):
225
+ # Define zoom factors
226
+ zoom_in_factor = 1 / 1.2
227
+ zoom_out_factor = 1.2
228
+
229
+ if event.num == 4 or (hasattr(event, 'delta') and event.delta > 0):
230
+ factor = zoom_in_factor
231
+ elif event.num == 5 or (hasattr(event, 'delta') and event.delta < 0):
232
+ factor = zoom_out_factor
233
+ else:
234
+ return
235
+
236
+ for ax in canvas.figure.get_axes():
237
+ # Translate mouse position to figure coordinates
238
+ mouse_x, mouse_y = event.x, event.y
239
+ inv = ax.transData.inverted()
240
+ data_x, data_y = inv.transform((mouse_x, mouse_y))
241
+
242
+ xlim = ax.get_xlim()
243
+ ylim = ax.get_ylim()
244
+
245
+ # Compute new limits centered on the mouse data position
246
+ new_width = (xlim[1] - xlim[0]) * factor
247
+ new_height = (ylim[1] - ylim[0]) * factor
248
+
249
+ new_xlim = [data_x - (data_x - xlim[0]) * factor,
250
+ data_x + (xlim[1] - data_x) * factor]
251
+ new_ylim = [data_y - (data_y - ylim[0]) * factor,
252
+ data_y + (ylim[1] - data_y) * factor]
253
+
254
+ ax.set_xlim(new_xlim)
255
+ ax.set_ylim(new_ylim)
256
+
257
+ # Clip all text labels to the axes area
258
+ for label in ax.texts:
259
+ label.set_clip_on(True)
260
+
261
+ # Update label visibility based on new limits
262
+ if hasattr(ax, '_label_annotations'):
263
+ for label in ax._label_annotations:
264
+ x, y = label.get_position()
265
+ is_visible = (new_xlim[0] <= x <= new_xlim[1]) and (new_ylim[0] <= y <= new_ylim[1])
266
+ label.set_visible(is_visible)
267
+
268
+ canvas.draw_idle()
178
269
 
179
- def zoom(event):
270
+ def zoom_v1(event):
180
271
  # Fixed zoom factors (adjust these if you want faster or slower zoom)
181
272
  zoom_in_factor = 0.9 # When zooming in, ranges shrink by 10%
182
273
  zoom_out_factor = 1.1 # When zooming out, ranges increase by 10%
@@ -1699,6 +1699,50 @@ def _check_masks(batch, batch_filenames, output_folder):
1699
1699
  return np.array(filtered_batch), filtered_filenames
1700
1700
 
1701
1701
  def _get_avg_object_size(masks):
1702
+ """
1703
+ Calculate:
1704
+ - average number of objects per image
1705
+ - average object size over all objects
1706
+
1707
+ Parameters:
1708
+ masks (list): A list of 2D or 3D masks with labeled objects.
1709
+
1710
+ Returns:
1711
+ tuple:
1712
+ avg_num_objects_per_image (float)
1713
+ avg_object_size (float)
1714
+ """
1715
+ per_image_counts = []
1716
+ all_areas = []
1717
+
1718
+ for idx, mask in enumerate(masks):
1719
+ if mask.ndim in [2, 3] and np.any(mask):
1720
+ props = measure.regionprops(mask)
1721
+ areas = [prop.area for prop in props]
1722
+ per_image_counts.append(len(areas))
1723
+ all_areas.extend(areas)
1724
+ else:
1725
+ per_image_counts.append(0)
1726
+ if not np.any(mask):
1727
+ print(f"Warning: Mask {idx} is empty.")
1728
+ elif mask.ndim not in [2, 3]:
1729
+ print(f"Warning: Mask {idx} has invalid dimension: {mask.ndim}")
1730
+
1731
+ # Average number of objects per image
1732
+ if per_image_counts:
1733
+ avg_num_objects_per_image = sum(per_image_counts) / len(per_image_counts)
1734
+ else:
1735
+ avg_num_objects_per_image = 0
1736
+
1737
+ # Average object size over all objects
1738
+ if all_areas:
1739
+ avg_object_size = sum(all_areas) / len(all_areas)
1740
+ else:
1741
+ avg_object_size = 0
1742
+
1743
+ return avg_num_objects_per_image, avg_object_size
1744
+
1745
+ def _get_avg_object_size_v1(masks):
1702
1746
  """
1703
1747
  Calculate the average size of objects in a list of masks.
1704
1748
 
@@ -34,7 +34,6 @@ from collections import defaultdict
34
34
  from matplotlib.gridspec import GridSpec
35
35
  from matplotlib_venn import venn2
36
36
 
37
- #filter_dict={'cell':[(0,100000), (0, 65000)],'nucleus':[(3000,100000), (1500, 65000)],'pathogen':[(500,100000), (0, 65000)]}
38
37
  def plot_image_mask_overlay(
39
38
  file,
40
39
  channels,
@@ -367,6 +366,54 @@ def plot_image_mask_overlay(
367
366
 
368
367
  return fig
369
368
 
369
+ def plot_cellpose4_output(batch, masks, flows, cmap='inferno', figuresize=10, nr=1, print_object_number=True):
370
+ """
371
+ Plot the masks and flows for a given batch of images.
372
+
373
+ Args:
374
+ batch (numpy.ndarray): The batch of images.
375
+ masks (list or numpy.ndarray): The masks corresponding to the images.
376
+ flows (list or numpy.ndarray): The flows corresponding to the images.
377
+ cmap (str, optional): The colormap to use for displaying the images. Defaults to 'inferno'.
378
+ figuresize (int, optional): The size of the figure. Defaults to 20.
379
+ nr (int, optional): The maximum number of images to plot. Defaults to 1.
380
+ file_type (str, optional): The file type of the flows. Defaults to '.npz'.
381
+ print_object_number (bool, optional): Whether to print the object number on the mask. Defaults to True.
382
+
383
+ Returns:
384
+ None
385
+ """
386
+
387
+ from .utils import _generate_mask_random_cmap, mask_object_count
388
+
389
+ font = figuresize/2
390
+ index = 0
391
+
392
+ for image, mask, flow in zip(batch, masks, flows):
393
+ #if print_object_number:
394
+ # num_objects = mask_object_count(mask)
395
+ # print(f'Number of objects: {num_objects}')
396
+ random_cmap = _generate_mask_random_cmap(mask)
397
+
398
+ if index < nr:
399
+ index += 1
400
+ chans = image.shape[-1]
401
+ fig, ax = plt.subplots(1, image.shape[-1] + 2, figsize=(4 * figuresize, figuresize))
402
+ for v in range(0, image.shape[-1]):
403
+ ax[v].imshow(image[..., v], cmap=cmap, interpolation='nearest')
404
+ ax[v].set_title('Image - Channel'+str(v))
405
+ ax[chans].imshow(mask, cmap=random_cmap, interpolation='nearest')
406
+ ax[chans].set_title('Mask')
407
+ if print_object_number:
408
+ unique_objects = np.unique(mask)[1:]
409
+ for obj in unique_objects:
410
+ cy, cx = ndi.center_of_mass(mask == obj)
411
+ ax[chans].text(cx, cy, str(obj), color='white', fontsize=font, ha='center', va='center')
412
+ ax[chans+1].imshow(flow, cmap='viridis', interpolation='nearest')
413
+ ax[chans+1].set_title('Flow')
414
+ plt.show()
415
+ return
416
+
370
417
  def plot_masks(batch, masks, flows, cmap='inferno', figuresize=10, nr=1, file_type='.npz', print_object_number=True):
371
418
  """
372
419
  Plot the masks and flows for a given batch of images.
@@ -64,9 +64,9 @@ def set_default_settings_preprocess_generate_masks(settings={}):
64
64
  settings.setdefault('nucleus_background', 100)
65
65
  settings.setdefault('nucleus_Signal_to_noise', 10)
66
66
  settings.setdefault('nucleus_CP_prob', 0)
67
- settings.setdefault('nucleus_FT', 100)
68
- settings.setdefault('cell_FT', 100)
69
- settings.setdefault('pathogen_FT', 100)
67
+ settings.setdefault('nucleus_FT', 1.0)
68
+ settings.setdefault('cell_FT', 1.0)
69
+ settings.setdefault('pathogen_FT', 1.0)
70
70
 
71
71
  # Plot settings
72
72
  settings.setdefault('plot', False)
@@ -97,6 +97,10 @@ def set_default_settings_preprocess_generate_masks(settings={}):
97
97
  settings.setdefault('upscale', False)
98
98
  settings.setdefault('upscale_factor', 2.0)
99
99
  settings.setdefault('adjust_cells', False)
100
+ settings.setdefault('use_sam_cell', False)
101
+ settings.setdefault('use_sam_nucleus', False)
102
+ settings.setdefault('use_sam_pathogen', False)
103
+
100
104
  return settings
101
105
 
102
106
  def set_default_plot_data_from_db(settings):
@@ -173,6 +177,8 @@ def _get_object_settings(object_type, settings):
173
177
  object_settings['maximum_size'] = (object_settings['diameter']**2)*10
174
178
  else:
175
179
  print(f'Cell diameter must be an integer or float, got {settings["cell_diamiter"]}')
180
+ if settings['use_sam_cell']:
181
+ object_settings['model_name'] = 'sam'
176
182
 
177
183
  elif object_type == 'nucleus':
178
184
  object_settings['model_name'] = 'nuclei'
@@ -187,6 +193,8 @@ def _get_object_settings(object_type, settings):
187
193
  object_settings['maximum_size'] = (object_settings['diameter']**2)*10
188
194
  else:
189
195
  print(f'Nucleus diameter must be an integer or float, got {settings["nucleus_diamiter"]}')
196
+ if settings['use_sam_nucleus']:
197
+ object_settings['model_name'] = 'sam'
190
198
 
191
199
  elif object_type == 'pathogen':
192
200
  object_settings['model_name'] = 'cyto'
@@ -203,10 +211,13 @@ def _get_object_settings(object_type, settings):
203
211
  object_settings['maximum_size'] = (object_settings['diameter']**2)*10
204
212
  else:
205
213
  print(f'Pathogen diameter must be an integer or float, got {settings["pathogen_diamiter"]}')
214
+
215
+ if settings['use_sam_pathogen']:
216
+ object_settings['model_name'] = 'sam'
206
217
 
207
218
  else:
208
219
  print(f'Object type: {object_type} not supported. Supported object types are : cell, nucleus and pathogen')
209
-
220
+
210
221
  if settings['verbose']:
211
222
  print(object_settings)
212
223
 
@@ -712,7 +723,7 @@ expected_types = {
712
723
  "nucleus_background": int,
713
724
  "nucleus_Signal_to_noise": float,
714
725
  "nucleus_CP_prob": float,
715
- "nucleus_FT": float,
726
+ "nucleus_FT": (int, float),
716
727
  "cell_channel": (int, type(None)),
717
728
  "cell_background": (int, float),
718
729
  "cell_Signal_to_noise": (int, float),
@@ -1003,11 +1014,14 @@ expected_types = {
1003
1014
  "nucleus_diamiter":int,
1004
1015
  "pathogen_diamiter":int,
1005
1016
  "consolidate":bool,
1017
+ 'use_sam_cell':bool,
1018
+ 'use_sam_nucleus':bool,
1019
+ 'use_sam_pathogen':bool,
1006
1020
  "distance_gaussian_sigma": (int, type(None))
1007
1021
  }
1008
1022
 
1009
1023
  categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset","model_path","grna_csv","row_csv","column_csv", "metadata_files", "score_data","count_data"],
1010
- "General": ["cell_mask_dim", "cytoplasm", "cell_chann_dim", "cell_channel", "nucleus_chann_dim", "nucleus_channel", "nucleus_mask_dim", "pathogen_mask_dim", "pathogen_chann_dim", "pathogen_channel", "test_mode", "plot", "metadata_type", "custom_regex", "experiment", "channels", "magnification", "channel_dims", "apply_model_to_dataset", "generate_training_dataset", "train_DL_model", "delete_intermediate", "uninfected", ],
1024
+ "General": ["cell_mask_dim", "cytoplasm", "cell_chann_dim", "cell_channel", "nucleus_chann_dim", "nucleus_channel", "nucleus_mask_dim", "pathogen_mask_dim", "pathogen_chann_dim", "pathogen_channel", "test_mode", "plot", "metadata_type", "custom_regex", "experiment", "channels", "magnification", "channel_dims", "apply_model_to_dataset", "generate_training_dataset", "train_DL_model", "delete_intermediate", "uninfected", ],
1011
1025
  "Cellpose":["denoise","fill_in","from_scratch", "n_epochs", "width_height", "model_name", "custom_model", "resample", "rescale", "CP_prob", "flow_threshold", "percentiles", "invert", "diameter", "grayscale", "Signal_to_noise", "resize", "target_height", "target_width"],
1012
1026
  "Cell": ["cell_diamiter","cell_intensity_range", "cell_size_range", "cell_background", "cell_Signal_to_noise", "cell_CP_prob", "cell_FT", "remove_background_cell", "cell_min_size", "cytoplasm_min_size", "adjust_cells", "cells", "cell_loc"],
1013
1027
  "Nucleus": ["nucleus_diamiter","nucleus_intensity_range", "nucleus_size_range", "nucleus_background", "nucleus_Signal_to_noise", "nucleus_CP_prob", "nucleus_FT", "remove_background_nucleus", "nucleus_min_size", "nucleus_loc"],
@@ -1025,7 +1039,7 @@ categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset
1025
1039
  "Plot": ["split_axis_lims", "x_lim","log_x","log_y", "plot_control", "plot_nr", "examples_to_plot", "normalize_plots", "cmap", "figuresize", "plot_cluster_grids", "img_zoom", "row_limit", "color_by", "plot_images", "smooth_lines", "plot_points", "plot_outlines", "black_background", "plot_by_cluster", "heatmap_feature","grouping","min_max","cmap","save_figure"],
1026
1040
  "Timelapse": ["timelapse", "fps", "timelapse_displacement", "timelapse_memory", "timelapse_frame_limits", "timelapse_remove_transient", "timelapse_mode", "timelapse_objects", "compartments"],
1027
1041
  "Advanced": ["merge_edge_pathogen_cells", "test_images", "random_test", "test_nr", "test", "test_split", "normalize", "target_unique_count","threshold_multiplier", "threshold_method", "min_n","shuffle", "target_intensity_min", "cells_per_well", "nuclei_limit", "pathogen_limit", "background", "backgrounds", "schedule", "test_size","exclude","n_repeats","top_features", "model_type_ml", "model_type","minimum_cell_count","n_estimators","preprocess", "remove_background", "normalize", "lower_percentile", "merge_pathogens", "batch_size", "filter", "save", "masks", "verbose", "randomize", "n_jobs"],
1028
- "Beta": ["all_to_mip", "upscale", "upscale_factor", "consolidate", "distance_gaussian_sigma"]
1042
+ "Beta": ["all_to_mip", "upscale", "upscale_factor", "consolidate", "distance_gaussian_sigma","use_sam_pathogen","use_sam_nucleus", "use_sam_cell"]
1029
1043
  }
1030
1044
 
1031
1045
 
@@ -1415,6 +1429,9 @@ def generate_fields(variables, scrollable_frame):
1415
1429
  "overlay": "(bool) - Overlay activation maps on the images.",
1416
1430
  "shuffle": "(bool) - Shuffle the dataset bufore generating the activation maps",
1417
1431
  "correlation": "(bool) - Calculate correlation between image channels and activation maps. Data is saved to .db.",
1432
+ "use_sam_cell": "(bool) - Whether to use SAM for cell segmentation.",
1433
+ "use_sam_nucleus": "(bool) - Whether to use SAM for nucleus segmentation.",
1434
+ "use_sam_pathogen": "(bool) - Whether to use SAM for pathogen segmentation.",
1418
1435
  "normalize_input": "(bool) - Normalize the input images before passing them to the model.",
1419
1436
  "normalize_plots": "(bool) - Normalize images before plotting.",
1420
1437
  }
@@ -7,6 +7,65 @@ from multiprocessing import Pool
7
7
  from skimage.transform import resize as resizescikit
8
8
  from scipy.ndimage import binary_fill_holes
9
9
 
10
+ def parse_cellpose4_output(output):
11
+ """
12
+ General parser for Cellpose eval output.
13
+ Handles:
14
+ - batched format (list of 4 arrays)
15
+ - per-image list of flows
16
+ Returns:
17
+ masks, flows0, flows1, flows2, flows3
18
+ """
19
+
20
+ masks = output[0]
21
+ flows = output[1]
22
+
23
+ if not isinstance(flows, (list, tuple)):
24
+ raise ValueError(f"Unrecognized Cellpose flows type: {type(flows)}")
25
+
26
+ # Determine number of images
27
+ try:
28
+ num_images = len(masks)
29
+ except TypeError:
30
+ raise ValueError(f"Cannot determine number of images in masks (type={type(masks)})")
31
+
32
+ # Case A: batched format (4 arrays stacked over batch)
33
+ if len(flows) == 4 and all(isinstance(f, np.ndarray) for f in flows):
34
+ flow0_array, flow1_array, flow2_array, flow3_array = flows
35
+
36
+ flows0 = [flow0_array[i] for i in range(num_images)]
37
+ flows1 = [flow1_array[:, i] for i in range(num_images)]
38
+ flows2 = [flow2_array[i] for i in range(num_images)]
39
+ flows3 = [flow3_array[i] for i in range(num_images)]
40
+
41
+ return masks, flows0, flows1, flows2, flows3
42
+
43
+ # Case B: per-image format
44
+ elif len(flows) == num_images:
45
+ flows0, flows1, flows2, flows3 = [], [], [], []
46
+
47
+ for item in flows:
48
+ if isinstance(item, (list, tuple)):
49
+ n = len(item)
50
+ f0 = item[0] if n > 0 else None
51
+ f1 = item[1] if n > 1 else None
52
+ f2 = item[2] if n > 2 else None
53
+ f3 = item[3] if n > 3 else None
54
+ elif isinstance(item, np.ndarray):
55
+ f0, f1, f2, f3 = item, None, None, None
56
+ else:
57
+ f0 = f1 = f2 = f3 = None
58
+
59
+ flows0.append(f0)
60
+ flows1.append(f1)
61
+ flows2.append(f2)
62
+ flows3.append(f3)
63
+
64
+ return masks, flows0, flows1, flows2, flows3
65
+
66
+ # Unrecognized structure
67
+ raise ValueError(f"Unrecognized Cellpose flows format: type={type(flows)}, len={len(flows) if hasattr(flows,'__len__') else 'unknown'}")
68
+
10
69
  def identify_masks_finetune(settings):
11
70
 
12
71
  from .plot import print_mask_and_flows