spacr 0.3.47__tar.gz → 0.3.52__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 (280) hide show
  1. {spacr-0.3.47/spacr.egg-info → spacr-0.3.52}/PKG-INFO +3 -1
  2. {spacr-0.3.47 → spacr-0.3.52}/setup.py +3 -1
  3. spacr-0.3.52/spacr/chat_bot.py +31 -0
  4. {spacr-0.3.47 → spacr-0.3.52}/spacr/gui_elements.py +33 -7
  5. {spacr-0.3.47 → spacr-0.3.52}/spacr/gui_utils.py +11 -12
  6. {spacr-0.3.47 → spacr-0.3.52}/spacr/measure.py +4 -1
  7. {spacr-0.3.47 → spacr-0.3.52}/spacr/ml.py +453 -141
  8. {spacr-0.3.47 → spacr-0.3.52}/spacr/plot.py +612 -52
  9. {spacr-0.3.47 → spacr-0.3.52}/spacr/sequencing.py +5 -2
  10. {spacr-0.3.47 → spacr-0.3.52}/spacr/settings.py +15 -31
  11. spacr-0.3.52/spacr/toxo.py +632 -0
  12. {spacr-0.3.47 → spacr-0.3.52}/spacr/utils.py +35 -4
  13. {spacr-0.3.47 → spacr-0.3.52/spacr.egg-info}/PKG-INFO +3 -1
  14. {spacr-0.3.47 → spacr-0.3.52}/spacr.egg-info/SOURCES.txt +1 -0
  15. {spacr-0.3.47 → spacr-0.3.52}/spacr.egg-info/requires.txt +2 -0
  16. spacr-0.3.47/spacr/toxo.py +0 -344
  17. {spacr-0.3.47 → spacr-0.3.52}/.readthedocs.yaml +0 -0
  18. {spacr-0.3.47 → spacr-0.3.52}/LICENSE +0 -0
  19. {spacr-0.3.47 → spacr-0.3.52}/MANIFEST.in +0 -0
  20. {spacr-0.3.47 → spacr-0.3.52}/README.rst +0 -0
  21. {spacr-0.3.47 → spacr-0.3.52}/deploy_docs.sh +0 -0
  22. {spacr-0.3.47 → spacr-0.3.52}/docs/requirements.txt +0 -0
  23. {spacr-0.3.47 → spacr-0.3.52}/docs/source/Makefile +0 -0
  24. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/doctrees/environment.pickle +0 -0
  25. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/index.html +0 -0
  26. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_annotate.html +0 -0
  27. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_classify.html +0 -0
  28. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_make_masks.html +0 -0
  29. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_mask.html +0 -0
  30. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_measure.html +0 -0
  31. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_sequencing.html +0 -0
  32. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/app_umap.html +0 -0
  33. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/core.html +0 -0
  34. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/deep_spacr.html +0 -0
  35. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/graph_learning.html +0 -0
  36. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/gui.html +0 -0
  37. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/gui_core.html +0 -0
  38. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/gui_elements.html +0 -0
  39. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/gui_utils.html +0 -0
  40. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/io.html +0 -0
  41. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/logger.html +0 -0
  42. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/measure.html +0 -0
  43. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/plot.html +0 -0
  44. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/sequencing.html +0 -0
  45. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/settings.html +0 -0
  46. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/sim.html +0 -0
  47. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/timelapse.html +0 -0
  48. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_modules/spacr/utils.html +0 -0
  49. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_sources/index.rst.txt +0 -0
  50. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_sources/modules.rst.txt +0 -0
  51. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_sources/spacr.rst.txt +0 -0
  52. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  53. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/basic.css +0 -0
  54. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/badge_only.css +0 -0
  55. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  56. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  57. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  58. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  59. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  60. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  61. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  62. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  63. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  64. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  65. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  66. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  67. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  68. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  69. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  70. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  71. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  72. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/css/theme.css +0 -0
  73. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/doctools.js +0 -0
  74. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/documentation_options.js +0 -0
  75. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/file.png +0 -0
  76. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/jquery.js +0 -0
  77. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/js/badge_only.js +0 -0
  78. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  79. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/js/html5shiv.min.js +0 -0
  80. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/js/theme.js +0 -0
  81. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/language_data.js +0 -0
  82. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/minus.png +0 -0
  83. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/plus.png +0 -0
  84. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/pygments.css +0 -0
  85. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/searchtools.js +0 -0
  86. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/_static/sphinx_highlight.js +0 -0
  87. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/genindex.html +0 -0
  88. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/index.html +0 -0
  89. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/modules.html +0 -0
  90. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/objects.inv +0 -0
  91. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/py-modindex.html +0 -0
  92. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/search.html +0 -0
  93. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/searchindex.js +0 -0
  94. {spacr-0.3.47 → spacr-0.3.52}/docs/source/_build/html/spacr.html +0 -0
  95. {spacr-0.3.47 → spacr-0.3.52}/docs/source/conf.py +0 -0
  96. {spacr-0.3.47 → spacr-0.3.52}/docs/source/index.rst +0 -0
  97. {spacr-0.3.47 → spacr-0.3.52}/docs/source/make.bat +0 -0
  98. {spacr-0.3.47 → spacr-0.3.52}/docs/source/modules.rst +0 -0
  99. {spacr-0.3.47 → spacr-0.3.52}/docs/source/spacr.rst +0 -0
  100. {spacr-0.3.47 → spacr-0.3.52}/environment.yaml +0 -0
  101. {spacr-0.3.47 → spacr-0.3.52}/fonts/OpenSans-Regular.ttf +0 -0
  102. {spacr-0.3.47 → spacr-0.3.52}/notebooks/cv_scoring_nb.ipynb +0 -0
  103. {spacr-0.3.47 → spacr-0.3.52}/notebooks/deep_learning_spacr.ipynb +0 -0
  104. {spacr-0.3.47 → spacr-0.3.52}/notebooks/machine_learning_spacr_nb.ipynb +0 -0
  105. {spacr-0.3.47 → spacr-0.3.52}/notebooks/spacr_0.1_all_settings_git.ipynb +0 -0
  106. {spacr-0.3.47 → spacr-0.3.52}/notebooks/spacr_0.1_minimal.ipynb +0 -0
  107. {spacr-0.3.47 → spacr-0.3.52}/path/home/carruthers/datasets/plate1/measurements/measurements.db +0 -0
  108. {spacr-0.3.47 → spacr-0.3.52}/path/home/carruthers/datasets/plate1/settings/measure_crop_settings.csv +0 -0
  109. {spacr-0.3.47 → spacr-0.3.52}/path/settings/preprocess_generate_masks_settings.csv +0 -0
  110. {spacr-0.3.47 → spacr-0.3.52}/requirements.txt +0 -0
  111. {spacr-0.3.47 → spacr-0.3.52}/settings/measure_crop_settings.csv +0 -0
  112. {spacr-0.3.47 → spacr-0.3.52}/setup.cfg +0 -0
  113. {spacr-0.3.47 → spacr-0.3.52}/setup_docs.sh +0 -0
  114. {spacr-0.3.47 → spacr-0.3.52}/source/conf.py +0 -0
  115. {spacr-0.3.47 → spacr-0.3.52}/source/index.rst +0 -0
  116. {spacr-0.3.47 → spacr-0.3.52}/source/modules.rst +0 -0
  117. {spacr-0.3.47 → spacr-0.3.52}/source/setup.rst +0 -0
  118. {spacr-0.3.47 → spacr-0.3.52}/source/spacr.rst +0 -0
  119. {spacr-0.3.47 → spacr-0.3.52}/spacr/__init__.py +0 -0
  120. {spacr-0.3.47 → spacr-0.3.52}/spacr/__main__.py +0 -0
  121. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_annotate.py +0 -0
  122. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_classify.py +0 -0
  123. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_make_masks.py +0 -0
  124. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_mask.py +0 -0
  125. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_measure.py +0 -0
  126. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_sequencing.py +0 -0
  127. {spacr-0.3.47 → spacr-0.3.52}/spacr/app_umap.py +0 -0
  128. {spacr-0.3.47 → spacr-0.3.52}/spacr/cellpose.py +0 -0
  129. {spacr-0.3.47 → spacr-0.3.52}/spacr/core.py +0 -0
  130. {spacr-0.3.47 → spacr-0.3.52}/spacr/deep_spacr.py +0 -0
  131. {spacr-0.3.47 → spacr-0.3.52}/spacr/gui.py +0 -0
  132. {spacr-0.3.47 → spacr-0.3.52}/spacr/gui_core.py +0 -0
  133. {spacr-0.3.47 → spacr-0.3.52}/spacr/io.py +0 -0
  134. {spacr-0.3.47 → spacr-0.3.52}/spacr/logger.py +0 -0
  135. {spacr-0.3.47 → spacr-0.3.52}/spacr/mediar.py +0 -0
  136. {spacr-0.3.47 → spacr-0.3.52}/spacr/openai.py +0 -0
  137. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/.gitignore +0 -0
  138. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/LICENSE +0 -0
  139. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/README.md +0 -0
  140. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/SetupDict.py +0 -0
  141. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/baseline.json +0 -0
  142. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/mediar_example.json +0 -0
  143. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/pred/pred_mediar.json +0 -0
  144. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step1_pretraining/phase1.json +0 -0
  145. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step1_pretraining/phase2.json +0 -0
  146. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning1.json +0 -0
  147. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step2_finetuning/finetuning2.json +0 -0
  148. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step3_prediction/base_prediction.json +0 -0
  149. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/config/step3_prediction/ensemble_tta.json +0 -0
  150. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/BasePredictor.py +0 -0
  151. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/BaseTrainer.py +0 -0
  152. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/Baseline/Predictor.py +0 -0
  153. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/Baseline/Trainer.py +0 -0
  154. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/Baseline/__init__.py +0 -0
  155. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/Baseline/utils.py +0 -0
  156. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/MEDIAR/EnsemblePredictor.py +0 -0
  157. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/MEDIAR/Predictor.py +0 -0
  158. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/MEDIAR/Trainer.py +0 -0
  159. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/MEDIAR/__init__.py +0 -0
  160. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/MEDIAR/utils.py +0 -0
  161. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/__init__.py +0 -0
  162. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/core/utils.py +0 -0
  163. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/evaluate.py +0 -0
  164. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/generate_mapping.py +0 -0
  165. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/examples/img1.tiff +0 -0
  166. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/examples/img2.tif +0 -0
  167. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/failure_cases.png +0 -0
  168. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/mediar_framework.png +0 -0
  169. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/mediar_model.PNG +0 -0
  170. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/image/mediar_results.png +0 -0
  171. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/main.py +0 -0
  172. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/predict.py +0 -0
  173. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/requirements.txt +0 -0
  174. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/__init__.py +0 -0
  175. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/__init__.py +0 -0
  176. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/custom/CellAware.py +0 -0
  177. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/custom/LoadImage.py +0 -0
  178. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/custom/NormalizeImage.py +0 -0
  179. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/custom/__init__.py +0 -0
  180. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/custom/modalities.pkl +0 -0
  181. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/datasetter.py +0 -0
  182. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/transforms.py +0 -0
  183. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/data_utils/utils.py +0 -0
  184. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/measures.py +0 -0
  185. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/models/MEDIARFormer.py +0 -0
  186. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/models/__init__.py +0 -0
  187. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/MEDIAR/train_tools/utils.py +0 -0
  188. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/data/lopit.csv +0 -0
  189. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/data/toxoplasma_metadata.csv +0 -0
  190. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/OFL.txt +0 -0
  191. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  192. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  193. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/README.txt +0 -0
  194. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  195. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  196. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  197. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  198. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  199. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  200. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  201. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  202. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  203. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  204. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  205. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  206. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  207. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  208. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  209. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  210. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  211. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  212. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  213. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  214. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  215. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  216. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  217. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  218. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  219. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  220. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  221. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  222. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  223. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  224. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  225. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  226. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  227. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  228. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  229. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  230. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/abort.png +0 -0
  231. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/annotate.png +0 -0
  232. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/cellpose_all.png +0 -0
  233. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/cellpose_masks.png +0 -0
  234. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/classify.png +0 -0
  235. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/convert.png +0 -0
  236. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/default.png +0 -0
  237. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/dna_matrix.mp4 +0 -0
  238. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/download.png +0 -0
  239. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/logo.pdf +0 -0
  240. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/logo_spacr.png +0 -0
  241. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/logo_spacr_1.png +0 -0
  242. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/make_masks.png +0 -0
  243. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/map_barcodes.png +0 -0
  244. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/mask.png +0 -0
  245. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/measure.png +0 -0
  246. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/ml_analyze.png +0 -0
  247. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/plaque.png +0 -0
  248. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/recruitment.png +0 -0
  249. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/regression.png +0 -0
  250. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/run.png +0 -0
  251. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/sequencing.png +0 -0
  252. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/settings.png +0 -0
  253. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/train_cellpose.png +0 -0
  254. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/icons/umap.png +0 -0
  255. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/images/plate1_E01_T0001F001L01A01Z01C02.tif +0 -0
  256. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/images/plate1_E01_T0001F001L01A02Z01C01.tif +0 -0
  257. {spacr-0.3.47 → spacr-0.3.52}/spacr/resources/images/plate1_E01_T0001F001L01A03Z01C03.tif +0 -0
  258. {spacr-0.3.47 → spacr-0.3.52}/spacr/sim.py +0 -0
  259. {spacr-0.3.47 → spacr-0.3.52}/spacr/submodules.py +0 -0
  260. {spacr-0.3.47 → spacr-0.3.52}/spacr/timelapse.py +0 -0
  261. {spacr-0.3.47 → spacr-0.3.52}/spacr/version.py +0 -0
  262. {spacr-0.3.47 → spacr-0.3.52}/spacr.egg-info/dependency_links.txt +0 -0
  263. {spacr-0.3.47 → spacr-0.3.52}/spacr.egg-info/entry_points.txt +0 -0
  264. {spacr-0.3.47 → spacr-0.3.52}/spacr.egg-info/top_level.txt +0 -0
  265. {spacr-0.3.47 → spacr-0.3.52}/tests/test_annotate_app.py +0 -0
  266. {spacr-0.3.47 → spacr-0.3.52}/tests/test_core.py +0 -0
  267. {spacr-0.3.47 → spacr-0.3.52}/tests/test_gui_classify_app.py +0 -0
  268. {spacr-0.3.47 → spacr-0.3.52}/tests/test_gui_mask_app.py +0 -0
  269. {spacr-0.3.47 → spacr-0.3.52}/tests/test_gui_measure_app.py +0 -0
  270. {spacr-0.3.47 → spacr-0.3.52}/tests/test_gui_sim_app.py +0 -0
  271. {spacr-0.3.47 → spacr-0.3.52}/tests/test_gui_utils.py +0 -0
  272. {spacr-0.3.47 → spacr-0.3.52}/tests/test_io.py +0 -0
  273. {spacr-0.3.47 → spacr-0.3.52}/tests/test_mask_app.py +0 -0
  274. {spacr-0.3.47 → spacr-0.3.52}/tests/test_measure.py +0 -0
  275. {spacr-0.3.47 → spacr-0.3.52}/tests/test_plot.py +0 -0
  276. {spacr-0.3.47 → spacr-0.3.52}/tests/test_sim.py +0 -0
  277. {spacr-0.3.47 → spacr-0.3.52}/tests/test_timelapse.py +0 -0
  278. {spacr-0.3.47 → spacr-0.3.52}/tests/test_train.py +0 -0
  279. {spacr-0.3.47 → spacr-0.3.52}/tests/test_umap.py +0 -0
  280. {spacr-0.3.47 → spacr-0.3.52}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.3.47
3
+ Version: 0.3.52
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
@@ -16,6 +16,7 @@ Requires-Dist: scipy<2.0,>=1.12.0
16
16
  Requires-Dist: cellpose<4.0,>=3.0.6
17
17
  Requires-Dist: scikit-image<1.0,>=0.22.0
18
18
  Requires-Dist: scikit-learn<2.0,>=1.4.1
19
+ Requires-Dist: scikit-posthocs<0.20,>=0.10.0
19
20
  Requires-Dist: mahotas<2.0,>=1.4.13
20
21
  Requires-Dist: btrack<1.0,>=0.6.5
21
22
  Requires-Dist: trackpy<1.0,>=0.6.2
@@ -66,6 +67,7 @@ Requires-Dist: gdown
66
67
  Requires-Dist: IPython<9.0,>=8.18.1
67
68
  Requires-Dist: ipykernel
68
69
  Requires-Dist: ipywidgets<9.0,>=8.1.2
70
+ Requires-Dist: brokenaxes<1.0,>=0.6.2
69
71
  Requires-Dist: huggingface-hub<0.25,>=0.24.0
70
72
  Provides-Extra: dev
71
73
  Requires-Dist: pytest<3.11,>=3.9; extra == "dev"
@@ -12,6 +12,7 @@ dependencies = [
12
12
  'cellpose>=3.0.6,<4.0',
13
13
  'scikit-image>=0.22.0,<1.0',
14
14
  'scikit-learn>=1.4.1,<2.0',
15
+ 'scikit-posthocs>=0.10.0, <0.20',
15
16
  'mahotas>=1.4.13,<2.0',
16
17
  'btrack>=0.6.5,<1.0',
17
18
  'trackpy>=0.6.2,<1.0',
@@ -62,12 +63,13 @@ dependencies = [
62
63
  'IPython>=8.18.1,<9.0',
63
64
  'ipykernel',
64
65
  'ipywidgets>=8.1.2,<9.0',
66
+ 'brokenaxes>=0.6.2,<1.0',
65
67
  'huggingface-hub>=0.24.0,<0.25'
66
68
  ]
67
69
 
68
70
  setup(
69
71
  name="spacr",
70
- version="0.3.47",
72
+ version="0.3.52",
71
73
  author="Einar Birnir Olafsson",
72
74
  author_email="olafsson@med.umich.com",
73
75
  description="Spatial phenotype analysis of crisp screens (SpaCr)",
@@ -0,0 +1,31 @@
1
+ import os
2
+ import torch
3
+ from multiprocessing import Queue
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM
5
+
6
+ # Disable parallelism warnings
7
+ os.environ["TOKENIZERS_PARALLELISM"] = "false"
8
+
9
+ def load_model(model_queue):
10
+ """Load the Falcon-7B model and send the status via a queue."""
11
+ try:
12
+ print("Loading Falcon-7B model...")
13
+ tokenizer = AutoTokenizer.from_pretrained("tiiuae/falcon-7b")
14
+
15
+ # Set `pad_token` to `eos_token` if not already set
16
+ if tokenizer.pad_token is None:
17
+ tokenizer.pad_token = tokenizer.eos_token
18
+
19
+ model = AutoModelForCausalLM.from_pretrained("tiiuae/falcon-7b")
20
+ model.config.pad_token_id = tokenizer.pad_token_id
21
+
22
+ # Send the loaded model and tokenizer back via the queue
23
+ model_queue.put((model, tokenizer, "Model loaded successfully!"))
24
+ except Exception as e:
25
+ model_queue.put((None, None, f"Error loading model: {e}"))
26
+
27
+ def language_chat(tokenizer, model, user_input):
28
+ inputs = tokenizer(user_input, return_tensors="pt", padding=True, truncation=True)
29
+ outputs = model.generate(inputs.input_ids, max_length=256, pad_token_id=tokenizer.eos_token_id)
30
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
31
+
@@ -16,7 +16,8 @@ from collections import deque
16
16
  from skimage.draw import polygon, line
17
17
  from skimage.transform import resize
18
18
  from scipy.ndimage import binary_fill_holes, label
19
- from tkinter import ttk, scrolledtext
19
+ from tkinter import ttk, scrolledtext
20
+ from skimage.color import rgb2gray
20
21
 
21
22
  fig = None
22
23
 
@@ -1534,20 +1535,45 @@ class ModifyMaskApp:
1534
1535
  tk.Label(self.zoom_toolbar, text="Upper Percentile:", bg='black', fg='white').pack(side='left')
1535
1536
  self.upper_entry = tk.Entry(self.zoom_toolbar, textvariable=self.upper_quantile, bg='black', fg='white')
1536
1537
  self.upper_entry.pack(side='left')
1537
-
1538
-
1538
+
1539
1539
  def load_image_and_mask(self, index):
1540
+ # Load the image
1540
1541
  image_path = os.path.join(self.folder_path, self.image_filenames[index])
1541
- image = imageio.imread(image_path)
1542
+ image = imageio.imread(image_path)
1543
+ print(f"Original Image shape: {image.shape}, dtype: {image.dtype}")
1544
+
1545
+ # Handle multi-channel or transparency issues
1546
+ if image.ndim == 3:
1547
+ if image.shape[2] == 4: # If the image has an alpha channel (RGBA)
1548
+ image = image[..., :3] # Remove the alpha channel
1549
+
1550
+ # Convert RGB to grayscale using weighted average
1551
+ image = np.dot(image[..., :3], [0.2989, 0.5870, 0.1140]).astype(np.uint8)
1552
+ print(f"Converted to grayscale: {image.shape}")
1553
+
1554
+ # Ensure the shape is (height, width) without extra channel
1555
+ if image.ndim == 3 and image.shape[2] == 1:
1556
+ image = np.squeeze(image, axis=-1)
1557
+
1558
+ if image.dtype != np.uint16:
1559
+ # Scale the image to fit the 16-bit range (0–65535)
1560
+ image = (image / image.max() * 65535).astype(np.uint16)
1561
+ # eventually remove this images should not have to be 16 bit look into downstream function (non 16bit images are jsut black)
1562
+
1563
+ # Load the corresponding mask
1542
1564
  mask_path = os.path.join(self.masks_folder, self.image_filenames[index])
1543
1565
  if os.path.exists(mask_path):
1544
- print(f'loading mask:{mask_path} for image: {image_path}')
1566
+ print(f'Loading mask: {mask_path} for image: {image_path}')
1545
1567
  mask = imageio.imread(mask_path)
1568
+
1569
+ # Ensure mask is uint8
1546
1570
  if mask.dtype != np.uint8:
1547
- mask = (mask / np.max(mask) * 255).astype(np.uint8)
1571
+ mask = (mask / mask.max() * 255).astype(np.uint8)
1548
1572
  else:
1573
+ # Create a new mask with the same size as the image
1549
1574
  mask = np.zeros(image.shape[:2], dtype=np.uint8)
1550
- print(f'loaded new mask for image: {image_path}')
1575
+ print(f'Loaded new mask for image: {image_path}')
1576
+
1551
1577
  return image, mask
1552
1578
 
1553
1579
  ####################################################################################################
@@ -76,8 +76,8 @@ def load_app(root, app_name, app_func):
76
76
  root.current_app_exit_func()
77
77
  else:
78
78
  proceed_with_app(root, app_name, app_func)
79
-
80
- def parse_list_v1(value):
79
+
80
+ def parse_list(value):
81
81
  """
82
82
  Parses a string representation of a list and returns the parsed list.
83
83
 
@@ -85,7 +85,7 @@ def parse_list_v1(value):
85
85
  value (str): The string representation of the list.
86
86
 
87
87
  Returns:
88
- list: The parsed list.
88
+ list: The parsed list, which can contain integers, floats, or strings.
89
89
 
90
90
  Raises:
91
91
  ValueError: If the input value is not a valid list format or contains mixed types or unsupported types.
@@ -93,21 +93,20 @@ def parse_list_v1(value):
93
93
  try:
94
94
  parsed_value = ast.literal_eval(value)
95
95
  if isinstance(parsed_value, list):
96
- # Check if the list elements are homogeneous (all int or all str)
97
- if all(isinstance(item, int) for item in parsed_value):
98
- return parsed_value
99
- elif all(isinstance(item, str) for item in parsed_value):
100
- return parsed_value
101
- elif all(isinstance(item, float) for item in parsed_value):
96
+ # Check if all elements are homogeneous (either all int, float, or str)
97
+ if all(isinstance(item, (int, float, str)) for item in parsed_value):
102
98
  return parsed_value
103
99
  else:
104
100
  raise ValueError("List contains mixed types or unsupported types")
101
+ elif isinstance(parsed_value, tuple):
102
+ # Convert tuple to list if it’s a single-element tuple
103
+ return list(parsed_value) if len(parsed_value) > 1 else [parsed_value[0]]
105
104
  else:
106
105
  raise ValueError(f"Expected a list but got {type(parsed_value).__name__}")
107
106
  except (ValueError, SyntaxError) as e:
108
107
  raise ValueError(f"Invalid format for list: {value}. Error: {e}")
109
-
110
- def parse_list(value):
108
+
109
+ def parse_list_v1(value):
111
110
  """
112
111
  Parses a string representation of a list and returns the parsed list.
113
112
 
@@ -391,7 +390,7 @@ def convert_settings_dict_for_gui(settings):
391
390
  'nucleus_chann_dim': ('combo', chans, None),
392
391
  'pathogen_mask_dim': ('combo', chans, None),
393
392
  'pathogen_chann_dim': ('combo', chans, None),
394
- 'crop_mode': ('combo', ['cell', 'nucleus', 'pathogen', '[cell, nucleus, pathogen]', '[cell,nucleus, pathogen]'], ['cell']),
393
+ 'crop_mode': ('combo', [['cell'], ['nucleus'], ['pathogen'], ['cell', 'nucleus'], ['cell', 'pathogen'], ['nucleus', 'pathogen'], ['cell', 'nucleus', 'pathogen']], ['cell']),
395
394
  'magnification': ('combo', [20, 40, 60], 20),
396
395
  'nucleus_channel': ('combo', chans_v2, None),
397
396
  'cell_channel': ('combo', chans_v2, None),
@@ -1028,7 +1028,10 @@ def measure_crop(settings):
1028
1028
  return
1029
1029
 
1030
1030
  if not isinstance(settings['crop_mode'], list):
1031
- print(f"WARNING: crop_mode should be a list with at least one element e.g. ['cell'] or ['cell','nucleus'] or [None]")
1031
+ print(f"WARNING: crop_mode should be a list with at least one element e.g. ['cell'] or ['cell','nucleus'] or [None] got: {settings['crop_mode']}")
1032
+ settings['crop_mode'] = [settings['crop_mode']]
1033
+ settings['crop_mode'] = [str(crop_mode) for crop_mode in settings['crop_mode']]
1034
+ print(f"Converted crop_mode to list: {settings['crop_mode']}")
1032
1035
  return
1033
1036
 
1034
1037
  _save_settings_to_db(settings)