careamics 0.0.10__tar.gz → 0.0.12__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.

Potentially problematic release.


This version of careamics might be problematic. Click here for more details.

Files changed (330) hide show
  1. {careamics-0.0.10 → careamics-0.0.12}/PKG-INFO +3 -3
  2. {careamics-0.0.10 → careamics-0.0.12}/pyproject.toml +2 -2
  3. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/careamist.py +20 -4
  4. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/configuration.py +10 -5
  5. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/data/data_model.py +38 -1
  6. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/optimizer_models.py +1 -3
  7. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/training_model.py +0 -2
  8. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/dataset_utils/running_stats.py +7 -3
  9. careamics-0.0.12/src/careamics/dataset_ng/README.md +212 -0
  10. careamics-0.0.12/src/careamics/dataset_ng/dataset.py +233 -0
  11. careamics-0.0.12/src/careamics/dataset_ng/demos/bsd68_demo.ipynb +356 -0
  12. careamics-0.0.12/src/careamics/dataset_ng/demos/care_U2OS_demo.ipynb +330 -0
  13. careamics-0.0.12/src/careamics/dataset_ng/demos/demo_custom_image_stack.ipynb +734 -0
  14. careamics-0.0.12/src/careamics/dataset_ng/demos/demo_datamodule.ipynb +443 -0
  15. {careamics-0.0.10/src/careamics/dataset_ng → careamics-0.0.12/src/careamics/dataset_ng/demos}/demo_dataset.ipynb +39 -15
  16. {careamics-0.0.10/src/careamics/dataset_ng → careamics-0.0.12/src/careamics/dataset_ng/demos}/demo_patch_extractor.py +7 -9
  17. careamics-0.0.12/src/careamics/dataset_ng/demos/mouse_nuclei_demo.ipynb +292 -0
  18. careamics-0.0.12/src/careamics/dataset_ng/factory.py +408 -0
  19. careamics-0.0.12/src/careamics/dataset_ng/legacy_interoperability.py +168 -0
  20. careamics-0.0.12/src/careamics/dataset_ng/patch_extractor/__init__.py +5 -0
  21. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/demo_custom_image_stack_loader.py +6 -4
  22. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/image_stack/__init__.py +2 -1
  23. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/image_stack/image_stack_protocol.py +5 -1
  24. careamics-0.0.12/src/careamics/dataset_ng/patch_extractor/image_stack_loader.py +70 -0
  25. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/patch_extractor.py +5 -4
  26. careamics-0.0.12/src/careamics/dataset_ng/patch_extractor/patch_extractor_factory.py +175 -0
  27. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patching_strategies/__init__.py +6 -1
  28. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patching_strategies/patching_strategy_protocol.py +31 -0
  29. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patching_strategies/random_patching.py +3 -1
  30. careamics-0.0.12/src/careamics/dataset_ng/patching_strategies/tiling_strategy.py +171 -0
  31. careamics-0.0.12/src/careamics/dataset_ng/patching_strategies/whole_sample.py +36 -0
  32. careamics-0.0.12/src/careamics/lightning/dataset_ng/data_module.py +488 -0
  33. careamics-0.0.12/src/careamics/lightning/dataset_ng/lightning_modules/__init__.py +9 -0
  34. careamics-0.0.12/src/careamics/lightning/dataset_ng/lightning_modules/care_module.py +58 -0
  35. careamics-0.0.12/src/careamics/lightning/dataset_ng/lightning_modules/n2v_module.py +67 -0
  36. careamics-0.0.12/src/careamics/lightning/dataset_ng/lightning_modules/unet_module.py +143 -0
  37. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/lightning_module.py +3 -0
  38. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/__init__.py +8 -3
  39. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/config.py +3 -3
  40. careamics-0.0.12/src/careamics/lvae_training/dataset/ms_dataset_ref.py +1067 -0
  41. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/multich_dataset.py +46 -17
  42. careamics-0.0.12/src/careamics/lvae_training/dataset/multicrop_dset.py +196 -0
  43. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/types.py +3 -3
  44. careamics-0.0.12/src/careamics/lvae_training/dataset/utils/index_manager.py +491 -0
  45. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/eval_utils.py +93 -3
  46. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/compose.py +1 -0
  47. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/normalize.py +18 -7
  48. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/lightning_utils.py +25 -11
  49. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset_ng/dataset/test_dataset.py +47 -14
  50. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset_ng/patching_strategies/test_all_strategies.py +26 -1
  51. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset_ng/patching_strategies/test_random_patching_ng.py +8 -8
  52. careamics-0.0.12/tests/dataset_ng/patching_strategies/test_tiling_strategy.py +158 -0
  53. {careamics-0.0.10 → careamics-0.0.12}/tests/test_careamist.py +36 -0
  54. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_normalize.py +26 -0
  55. careamics-0.0.10/src/careamics/dataset_ng/dataset/__init__.py +0 -3
  56. careamics-0.0.10/src/careamics/dataset_ng/dataset/dataset.py +0 -184
  57. careamics-0.0.10/src/careamics/dataset_ng/demo_patch_extractor_factory.py +0 -37
  58. careamics-0.0.10/src/careamics/dataset_ng/patch_extractor/__init__.py +0 -10
  59. careamics-0.0.10/src/careamics/dataset_ng/patch_extractor/image_stack_loader.py +0 -140
  60. careamics-0.0.10/src/careamics/dataset_ng/patch_extractor/patch_extractor_factory.py +0 -208
  61. careamics-0.0.10/src/careamics/lvae_training/dataset/utils/index_manager.py +0 -232
  62. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  63. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/example_report.md +0 -0
  64. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  65. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/interoperability_request.md +0 -0
  66. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/question.md +0 -0
  67. {careamics-0.0.10 → careamics-0.0.12}/.github/ISSUE_TEMPLATE/refactoring_suggestion.md +0 -0
  68. {careamics-0.0.10 → careamics-0.0.12}/.github/TEST_FAIL_TEMPLATE.md +0 -0
  69. {careamics-0.0.10 → careamics-0.0.12}/.github/dependabot.yml +0 -0
  70. {careamics-0.0.10 → careamics-0.0.12}/.github/pull_request_template.md +0 -0
  71. {careamics-0.0.10 → careamics-0.0.12}/.github/workflows/ci.yml +0 -0
  72. {careamics-0.0.10 → careamics-0.0.12}/.github/workflows/codecov.yml +0 -0
  73. {careamics-0.0.10 → careamics-0.0.12}/.github/workflows/lvae.yml +0 -0
  74. {careamics-0.0.10 → careamics-0.0.12}/.gitignore +0 -0
  75. {careamics-0.0.10 → careamics-0.0.12}/.pre-commit-config.yaml +0 -0
  76. {careamics-0.0.10 → careamics-0.0.12}/CODE_OF_CONDUCT.md +0 -0
  77. {careamics-0.0.10 → careamics-0.0.12}/LICENSE +0 -0
  78. {careamics-0.0.10 → careamics-0.0.12}/README.md +0 -0
  79. {careamics-0.0.10 → careamics-0.0.12}/codecov.yml +0 -0
  80. {careamics-0.0.10 → careamics-0.0.12}/mypy.ini +0 -0
  81. {careamics-0.0.10 → careamics-0.0.12}/scripts/export_bmz_readme.py +0 -0
  82. {careamics-0.0.10 → careamics-0.0.12}/scripts/export_covers.py +0 -0
  83. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/__init__.py +0 -0
  84. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/cli/__init__.py +0 -0
  85. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/cli/conf.py +0 -0
  86. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/cli/main.py +0 -0
  87. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/cli/utils.py +0 -0
  88. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/__init__.py +0 -0
  89. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/__init__.py +0 -0
  90. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/care_algorithm_model.py +0 -0
  91. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/n2n_algorithm_model.py +0 -0
  92. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/n2v_algorithm_model.py +0 -0
  93. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/unet_algorithm_model.py +0 -0
  94. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/algorithms/vae_algorithm_model.py +0 -0
  95. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/architectures/__init__.py +0 -0
  96. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/architectures/architecture_model.py +0 -0
  97. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/architectures/lvae_model.py +0 -0
  98. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/architectures/unet_model.py +0 -0
  99. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/callback_model.py +0 -0
  100. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/configuration_factories.py +0 -0
  101. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/configuration_io.py +0 -0
  102. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/data/__init__.py +0 -0
  103. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/inference_model.py +0 -0
  104. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/likelihood_model.py +0 -0
  105. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/loss_model.py +0 -0
  106. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/nm_model.py +0 -0
  107. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/__init__.py +0 -0
  108. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_activations.py +0 -0
  109. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_algorithms.py +0 -0
  110. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_architectures.py +0 -0
  111. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_data.py +0 -0
  112. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_loggers.py +0 -0
  113. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_losses.py +0 -0
  114. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_optimizers.py +0 -0
  115. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_pixel_manipulations.py +0 -0
  116. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_struct_axis.py +0 -0
  117. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/support/supported_transforms.py +0 -0
  118. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/tile_information.py +0 -0
  119. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/__init__.py +0 -0
  120. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/n2v_manipulate_model.py +0 -0
  121. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/normalize_model.py +0 -0
  122. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/transform_model.py +0 -0
  123. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/transform_unions.py +0 -0
  124. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/xy_flip_model.py +0 -0
  125. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/transformations/xy_random_rotate90_model.py +0 -0
  126. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/validators/__init__.py +0 -0
  127. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/validators/model_validators.py +0 -0
  128. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/config/validators/validator_utils.py +0 -0
  129. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/conftest.py +0 -0
  130. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/__init__.py +0 -0
  131. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/dataset_utils/__init__.py +0 -0
  132. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/dataset_utils/dataset_utils.py +0 -0
  133. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/dataset_utils/file_utils.py +0 -0
  134. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/dataset_utils/iterate_over_files.py +0 -0
  135. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/in_memory_dataset.py +0 -0
  136. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/in_memory_pred_dataset.py +0 -0
  137. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/in_memory_tiled_pred_dataset.py +0 -0
  138. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/iterable_dataset.py +0 -0
  139. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/iterable_pred_dataset.py +0 -0
  140. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/iterable_tiled_pred_dataset.py +0 -0
  141. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/patching/__init__.py +0 -0
  142. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/patching/patching.py +0 -0
  143. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/patching/random_patching.py +0 -0
  144. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/patching/sequential_patching.py +0 -0
  145. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/patching/validate_patch_dimension.py +0 -0
  146. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/tiling/__init__.py +0 -0
  147. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/tiling/collate_tiles.py +0 -0
  148. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/tiling/lvae_tiled_patching.py +0 -0
  149. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/tiling/tiled_patching.py +0 -0
  150. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset/zarr_dataset.py +0 -0
  151. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/image_stack/in_memory_image_stack.py +0 -0
  152. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patch_extractor/image_stack/zarr_image_stack.py +0 -0
  153. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/dataset_ng/patching_strategies/sequential_patching.py +0 -0
  154. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/__init__.py +0 -0
  155. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/read/__init__.py +0 -0
  156. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/read/get_func.py +0 -0
  157. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/read/tiff.py +0 -0
  158. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/read/zarr.py +0 -0
  159. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/write/__init__.py +0 -0
  160. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/write/get_func.py +0 -0
  161. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/file_io/write/tiff.py +0 -0
  162. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/__init__.py +0 -0
  163. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/__init__.py +0 -0
  164. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/hyperparameters_callback.py +0 -0
  165. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/prediction_writer_callback/__init__.py +0 -0
  166. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/prediction_writer_callback/file_path_utils.py +0 -0
  167. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/prediction_writer_callback/prediction_writer_callback.py +0 -0
  168. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/prediction_writer_callback/write_strategy.py +0 -0
  169. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/prediction_writer_callback/write_strategy_factory.py +0 -0
  170. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/callbacks/progress_bar_callback.py +0 -0
  171. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/predict_data_module.py +0 -0
  172. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lightning/train_data_module.py +0 -0
  173. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/__init__.py +0 -0
  174. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/fcn/__init__.py +0 -0
  175. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/fcn/losses.py +0 -0
  176. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/loss_factory.py +0 -0
  177. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/lvae/__init__.py +0 -0
  178. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/lvae/loss_utils.py +0 -0
  179. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/losses/lvae/losses.py +0 -0
  180. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/__init__.py +0 -0
  181. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/calibration.py +0 -0
  182. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/lc_dataset.py +0 -0
  183. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/multifile_dataset.py +0 -0
  184. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/utils/__init__.py +0 -0
  185. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/utils/data_utils.py +0 -0
  186. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/utils/empty_patch_fetcher.py +0 -0
  187. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/dataset/utils/index_switcher.py +0 -0
  188. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/get_config.py +0 -0
  189. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/lightning_module.py +0 -0
  190. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/metrics.py +0 -0
  191. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/train_lvae.py +0 -0
  192. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/lvae_training/train_utils.py +0 -0
  193. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/__init__.py +0 -0
  194. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bioimage/__init__.py +0 -0
  195. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bioimage/_readme_factory.py +0 -0
  196. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bioimage/bioimage_utils.py +0 -0
  197. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bioimage/cover_factory.py +0 -0
  198. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bioimage/model_description.py +0 -0
  199. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/bmz_io.py +0 -0
  200. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/model_io/model_io_utils.py +0 -0
  201. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/__init__.py +0 -0
  202. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/activation.py +0 -0
  203. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/layers.py +0 -0
  204. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/__init__.py +0 -0
  205. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/layers.py +0 -0
  206. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/likelihoods.py +0 -0
  207. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/lvae.py +0 -0
  208. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/noise_models.py +0 -0
  209. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/stochastic.py +0 -0
  210. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/lvae/utils.py +0 -0
  211. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/model_factory.py +0 -0
  212. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/models/unet.py +0 -0
  213. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/prediction_utils/__init__.py +0 -0
  214. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/prediction_utils/lvae_prediction.py +0 -0
  215. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/prediction_utils/lvae_tiling_manager.py +0 -0
  216. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/prediction_utils/prediction_outputs.py +0 -0
  217. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/prediction_utils/stitch_prediction.py +0 -0
  218. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/py.typed +0 -0
  219. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/__init__.py +0 -0
  220. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/n2v_manipulate.py +0 -0
  221. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/n2v_manipulate_torch.py +0 -0
  222. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/pixel_manipulation.py +0 -0
  223. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/pixel_manipulation_torch.py +0 -0
  224. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/struct_mask_parameters.py +0 -0
  225. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/transform.py +0 -0
  226. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/tta.py +0 -0
  227. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/xy_flip.py +0 -0
  228. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/transforms/xy_random_rotate90.py +0 -0
  229. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/__init__.py +0 -0
  230. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/autocorrelation.py +0 -0
  231. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/base_enum.py +0 -0
  232. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/context.py +0 -0
  233. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/logging.py +0 -0
  234. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/metrics.py +0 -0
  235. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/path_utils.py +0 -0
  236. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/plotting.py +0 -0
  237. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/ram.py +0 -0
  238. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/receptive_field.py +0 -0
  239. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/serializers.py +0 -0
  240. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/torch_utils.py +0 -0
  241. {careamics-0.0.10 → careamics-0.0.12}/src/careamics/utils/version.py +0 -0
  242. {careamics-0.0.10 → careamics-0.0.12}/tests/cli/__init__.py +0 -0
  243. {careamics-0.0.10 → careamics-0.0.12}/tests/cli/test_conf.py +0 -0
  244. {careamics-0.0.10 → careamics-0.0.12}/tests/cli/test_main.py +0 -0
  245. {careamics-0.0.10 → careamics-0.0.12}/tests/config/algorithms/test_care_algorithm_model.py +0 -0
  246. {careamics-0.0.10 → careamics-0.0.12}/tests/config/algorithms/test_n2n_algorithm_model.py +0 -0
  247. {careamics-0.0.10 → careamics-0.0.12}/tests/config/algorithms/test_n2v_algorithm_model.py +0 -0
  248. {careamics-0.0.10 → careamics-0.0.12}/tests/config/architectures/test_architecture_model.py +0 -0
  249. {careamics-0.0.10 → careamics-0.0.12}/tests/config/architectures/test_lvae_model.py +0 -0
  250. {careamics-0.0.10 → careamics-0.0.12}/tests/config/architectures/test_unet_model.py +0 -0
  251. {careamics-0.0.10 → careamics-0.0.12}/tests/config/data/test_data_model.py +0 -0
  252. {careamics-0.0.10 → careamics-0.0.12}/tests/config/support/test_supported_data.py +0 -0
  253. {careamics-0.0.10 → careamics-0.0.12}/tests/config/support/test_supported_optimizers.py +0 -0
  254. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_callback_models.py +0 -0
  255. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_configuration.py +0 -0
  256. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_configuration_factories.py +0 -0
  257. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_configuration_io.py +0 -0
  258. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_inference_model.py +0 -0
  259. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_n2v_preprocessing.py +0 -0
  260. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_optimizers_model.py +0 -0
  261. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_tile_information.py +0 -0
  262. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_training_model.py +0 -0
  263. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_unet_algorithm_model.py +0 -0
  264. {careamics-0.0.10 → careamics-0.0.12}/tests/config/test_vae_algorithm_model.py +0 -0
  265. {careamics-0.0.10 → careamics-0.0.12}/tests/config/transformations/test_n2v_manipulate_model.py +0 -0
  266. {careamics-0.0.10 → careamics-0.0.12}/tests/config/transformations/test_normalize_model.py +0 -0
  267. {careamics-0.0.10 → careamics-0.0.12}/tests/config/transformations/test_xy_flip_model.py +0 -0
  268. {careamics-0.0.10 → careamics-0.0.12}/tests/config/transformations/test_xy_random_rotate90_model.py +0 -0
  269. {careamics-0.0.10 → careamics-0.0.12}/tests/config/validators/test_model_validators.py +0 -0
  270. {careamics-0.0.10 → careamics-0.0.12}/tests/config/validators/test_validator_utils.py +0 -0
  271. {careamics-0.0.10 → careamics-0.0.12}/tests/conftest.py +0 -0
  272. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/dataset_utils/test_compute_normalization_stats.py +0 -0
  273. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/dataset_utils/test_list_files.py +0 -0
  274. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/patching/test_patching_utils.py +0 -0
  275. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/patching/test_random_patching.py +0 -0
  276. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/patching/test_sequential_patching.py +0 -0
  277. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_in_memory_dataset.py +0 -0
  278. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_in_memory_pred_dataset.py +0 -0
  279. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_in_memory_tiled_pred_dataset.py +0 -0
  280. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_iterable_dataset.py +0 -0
  281. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_iterable_pred_dataset.py +0 -0
  282. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/test_iterable_tiled_pred_dataset.py +0 -0
  283. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/tiling/test_collate_tiles.py +0 -0
  284. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/tiling/test_lvae_tiled_patching.py +0 -0
  285. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset/tiling/test_tiled_patching.py +0 -0
  286. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset_ng/patch_extractor/image_stack/test_zarr_image_stack.py +0 -0
  287. {careamics-0.0.10 → careamics-0.0.12}/tests/dataset_ng/patching_strategies/test_sequential_patching_ng.py +0 -0
  288. {careamics-0.0.10 → careamics-0.0.12}/tests/file_io/read/test_get_read_func.py +0 -0
  289. {careamics-0.0.10 → careamics-0.0.12}/tests/file_io/read/test_read_tiff.py +0 -0
  290. {careamics-0.0.10 → careamics-0.0.12}/tests/file_io/write/test_get_write_func.py +0 -0
  291. {careamics-0.0.10 → careamics-0.0.12}/tests/file_io/write/test_write_tiff.py +0 -0
  292. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/callbacks/prediction_writer_callback/test_cache_tiles_write_strategy.py +0 -0
  293. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/callbacks/prediction_writer_callback/test_file_path_utils.py +0 -0
  294. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/callbacks/prediction_writer_callback/test_prediction_writer_callback.py +0 -0
  295. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/callbacks/prediction_writer_callback/test_write_image_write_strategy.py +0 -0
  296. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/callbacks/prediction_writer_callback/test_write_strategy_factory.py +0 -0
  297. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_LVAE_lightning_module.py +0 -0
  298. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_lightning_api.py +0 -0
  299. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_lightning_module.py +0 -0
  300. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_lightning_module_onnx_exportability.py +0 -0
  301. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_predict_data_module.py +0 -0
  302. {careamics-0.0.10 → careamics-0.0.12}/tests/lightning/test_train_data_module.py +0 -0
  303. {careamics-0.0.10 → careamics-0.0.12}/tests/likelihood_modules/test_likelihoods.py +0 -0
  304. {careamics-0.0.10 → careamics-0.0.12}/tests/losses/test_lvae_losses.py +0 -0
  305. {careamics-0.0.10 → careamics-0.0.12}/tests/model_io/test_bmz_io.py +0 -0
  306. {careamics-0.0.10 → careamics-0.0.12}/tests/models/lvae/test_lvae_architecture.py +0 -0
  307. {careamics-0.0.10 → careamics-0.0.12}/tests/models/lvae/test_noise_model.py +0 -0
  308. {careamics-0.0.10 → careamics-0.0.12}/tests/models/lvae/test_utils.py +0 -0
  309. {careamics-0.0.10 → careamics-0.0.12}/tests/models/test_model_factory.py +0 -0
  310. {careamics-0.0.10 → careamics-0.0.12}/tests/models/test_unet.py +0 -0
  311. {careamics-0.0.10 → careamics-0.0.12}/tests/prediction_utils/test_lvae_prediction.py +0 -0
  312. {careamics-0.0.10 → careamics-0.0.12}/tests/prediction_utils/test_prediction_outputs.py +0 -0
  313. {careamics-0.0.10 → careamics-0.0.12}/tests/prediction_utils/test_stitch_prediction.py +0 -0
  314. {careamics-0.0.10 → careamics-0.0.12}/tests/test_conftest.py +0 -0
  315. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_compose.py +0 -0
  316. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_manipulate_n2v.py +0 -0
  317. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_pixel_manipulation.py +0 -0
  318. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_tta.py +0 -0
  319. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_xy_flip.py +0 -0
  320. {careamics-0.0.10 → careamics-0.0.12}/tests/transforms/test_xy_random_rotate90.py +0 -0
  321. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_autocorrelation.py +0 -0
  322. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_base_enum.py +0 -0
  323. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_context.py +0 -0
  324. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_lightning_utils.py +0 -0
  325. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_logging.py +0 -0
  326. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_metrics.py +0 -0
  327. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_serializers.py +0 -0
  328. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_torch_utils.py +0 -0
  329. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_version.py +0 -0
  330. {careamics-0.0.10 → careamics-0.0.12}/tests/utils/test_wandb.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: careamics
3
- Version: 0.0.10
3
+ Version: 0.0.12
4
4
  Summary: Toolbox for running N2V and friends.
5
5
  Project-URL: homepage, https://careamics.github.io/
6
6
  Project-URL: repository, https://github.com/CAREamics/careamics
@@ -19,9 +19,9 @@ Requires-Python: >=3.9
19
19
  Requires-Dist: bioimageio-core==0.7
20
20
  Requires-Dist: matplotlib<=3.10.1
21
21
  Requires-Dist: numpy<2.0.0
22
- Requires-Dist: pillow<=11.1.0
22
+ Requires-Dist: pillow<=11.2.1
23
23
  Requires-Dist: psutil<=7.0.0
24
- Requires-Dist: pydantic<2.11,>=2.5
24
+ Requires-Dist: pydantic<=2.12,>=2.11
25
25
  Requires-Dist: pytorch-lightning<=2.5.0.post0,>=2.2
26
26
  Requires-Dist: pyyaml!=6.0.0,<=6.0.2
27
27
  Requires-Dist: scikit-image<=0.25.2
@@ -48,13 +48,13 @@ dependencies = [
48
48
  'bioimageio.core==0.7',
49
49
  'tifffile<=2025.3.13',
50
50
  'psutil<=7.0.0',
51
- 'pydantic>=2.5,<2.11',
51
+ 'pydantic>=2.11,<=2.12',
52
52
  'pytorch_lightning>=2.2,<=2.5.0.post0',
53
53
  'pyyaml<=6.0.2,!=6.0.0',
54
54
  'typer>=0.12.3,<=0.15.2',
55
55
  'scikit-image<=0.25.2',
56
56
  'zarr<3.0.0',
57
- 'pillow<=11.1.0',
57
+ 'pillow<=11.2.1',
58
58
  'matplotlib<=3.10.1',
59
59
  'xarray<2025.3.0'
60
60
  ]
@@ -52,6 +52,9 @@ class CAREamist:
52
52
  by default None.
53
53
  callbacks : list of Callback, optional
54
54
  List of callbacks to use during training and prediction, by default None.
55
+ enable_progress_bar : bool
56
+ Whether a progress bar will be displayed during training, validation and
57
+ prediction.
55
58
 
56
59
  Attributes
57
60
  ----------
@@ -77,6 +80,7 @@ class CAREamist:
77
80
  source: Union[Path, str],
78
81
  work_dir: Optional[Union[Path, str]] = None,
79
82
  callbacks: Optional[list[Callback]] = None,
83
+ enable_progress_bar: bool = True,
80
84
  ) -> None: ...
81
85
 
82
86
  @overload
@@ -85,6 +89,7 @@ class CAREamist:
85
89
  source: Configuration,
86
90
  work_dir: Optional[Union[Path, str]] = None,
87
91
  callbacks: Optional[list[Callback]] = None,
92
+ enable_progress_bar: bool = True,
88
93
  ) -> None: ...
89
94
 
90
95
  def __init__(
@@ -92,6 +97,7 @@ class CAREamist:
92
97
  source: Union[Path, str, Configuration],
93
98
  work_dir: Optional[Union[Path, str]] = None,
94
99
  callbacks: Optional[list[Callback]] = None,
100
+ enable_progress_bar: bool = True,
95
101
  ) -> None:
96
102
  """
97
103
  Initialize CAREamist with a configuration object or a path.
@@ -112,6 +118,9 @@ class CAREamist:
112
118
  by default None.
113
119
  callbacks : list of Callback, optional
114
120
  List of callbacks to use during training and prediction, by default None.
121
+ enable_progress_bar : bool
122
+ Whether a progress bar will be displayed during training, validation and
123
+ prediction.
115
124
 
116
125
  Raises
117
126
  ------
@@ -169,7 +178,7 @@ class CAREamist:
169
178
  self.model, self.cfg = load_pretrained(source)
170
179
 
171
180
  # define the checkpoint saving callback
172
- self._define_callbacks(callbacks)
181
+ self._define_callbacks(callbacks, enable_progress_bar)
173
182
 
174
183
  # instantiate logger
175
184
  csv_logger = CSVLogger(
@@ -202,7 +211,7 @@ class CAREamist:
202
211
  precision=self.cfg.training_config.precision,
203
212
  max_steps=self.cfg.training_config.max_steps,
204
213
  check_val_every_n_epoch=self.cfg.training_config.check_val_every_n_epoch,
205
- enable_progress_bar=self.cfg.training_config.enable_progress_bar,
214
+ enable_progress_bar=enable_progress_bar,
206
215
  accumulate_grad_batches=self.cfg.training_config.accumulate_grad_batches,
207
216
  gradient_clip_val=self.cfg.training_config.gradient_clip_val,
208
217
  gradient_clip_algorithm=self.cfg.training_config.gradient_clip_algorithm,
@@ -215,13 +224,19 @@ class CAREamist:
215
224
  self.train_datamodule: Optional[TrainDataModule] = None
216
225
  self.pred_datamodule: Optional[PredictDataModule] = None
217
226
 
218
- def _define_callbacks(self, callbacks: Optional[list[Callback]] = None) -> None:
227
+ def _define_callbacks(
228
+ self, callbacks: Optional[list[Callback]], enable_progress_bar: bool
229
+ ) -> None:
219
230
  """Define the callbacks for the training loop.
220
231
 
221
232
  Parameters
222
233
  ----------
223
234
  callbacks : list of Callback, optional
224
235
  List of callbacks to use during training and prediction, by default None.
236
+ enable_progress_bar : bool
237
+ Whether a progress bar will be displayed during training, validation and
238
+ prediction. It controls whether a `ProgressBarCallback` is added to the
239
+ callback list.
225
240
  """
226
241
  self.callbacks = [] if callbacks is None else callbacks
227
242
 
@@ -251,9 +266,10 @@ class CAREamist:
251
266
  filename=self.cfg.experiment_name,
252
267
  **self.cfg.training_config.checkpoint_callback.model_dump(),
253
268
  ),
254
- ProgressBarCallback(),
255
269
  ]
256
270
  )
271
+ if enable_progress_bar:
272
+ self.callbacks.append(ProgressBarCallback())
257
273
 
258
274
  # early stopping callback
259
275
  if self.cfg.training_config.early_stopping_callback is not None:
@@ -4,10 +4,11 @@ from __future__ import annotations
4
4
 
5
5
  import re
6
6
  from pprint import pformat
7
- from typing import Any, Literal, Union
7
+ from typing import Any, Callable, Literal, Union
8
8
 
9
9
  from bioimageio.spec.generic.v0_3 import CiteEntry
10
10
  from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
11
+ from pydantic.main import IncEx
11
12
  from typing_extensions import Self
12
13
 
13
14
  from careamics.config.algorithms import (
@@ -297,17 +298,18 @@ class Configuration(BaseModel):
297
298
  self,
298
299
  *,
299
300
  mode: Literal["json", "python"] | str = "python",
300
- include: Any | None = None,
301
- exclude: Any | None = None,
301
+ include: IncEx | None = None,
302
+ exclude: IncEx | None = None,
302
303
  context: Any | None = None,
303
- by_alias: bool = False,
304
+ by_alias: bool | None = False,
304
305
  exclude_unset: bool = False,
305
306
  exclude_defaults: bool = False,
306
307
  exclude_none: bool = True,
307
308
  round_trip: bool = False,
308
309
  warnings: bool | Literal["none", "warn", "error"] = True,
310
+ fallback: Callable[[Any], Any] | None = None,
309
311
  serialize_as_any: bool = False,
310
- ) -> dict:
312
+ ) -> dict[str, Any]:
311
313
  """
312
314
  Override model_dump method in order to set default values.
313
315
 
@@ -337,6 +339,8 @@ class Configuration(BaseModel):
337
339
  representation.
338
340
  warnings : bool | Literal['none', 'warn', 'error'], default=True
339
341
  Whether to emit warnings.
342
+ fallback : Callable[[Any], Any] | None, default=None
343
+ A function to call when an unknown value is encountered.
340
344
  serialize_as_any : bool, default=False
341
345
  Whether to serialize all types as Any.
342
346
 
@@ -356,6 +360,7 @@ class Configuration(BaseModel):
356
360
  exclude_none=exclude_none,
357
361
  round_trip=round_trip,
358
362
  warnings=warnings,
363
+ fallback=fallback,
359
364
  serialize_as_any=serialize_as_any,
360
365
  )
361
366
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import os
6
+ import sys
5
7
  from collections.abc import Sequence
6
8
  from pprint import pformat
7
9
  from typing import Annotated, Any, Literal, Optional, Union
@@ -143,7 +145,7 @@ class DataConfig(BaseModel):
143
145
  should include the `shuffle` key, which is set to `True` by default. We strongly
144
146
  recommend to keep it as `True` to ensure the best training results."""
145
147
 
146
- val_dataloader_params: dict[str, Any] = Field(default={})
148
+ val_dataloader_params: dict[str, Any] = Field(default={}, validate_default=True)
147
149
  """Dictionary of PyTorch validation dataloader parameters."""
148
150
 
149
151
  @field_validator("patch_size")
@@ -210,6 +212,41 @@ class DataConfig(BaseModel):
210
212
 
211
213
  return axes
212
214
 
215
+ @field_validator("train_dataloader_params", "val_dataloader_params", mode="before")
216
+ @classmethod
217
+ def set_default_dataloader_params(
218
+ cls, dataloader_params: dict[str, Any]
219
+ ) -> dict[str, Any]:
220
+ """
221
+ Set default dataloader parameters if not provided.
222
+
223
+ - If 'num_workers' is not set, it defaults to the number of available CPU cores.
224
+ - If 'pin_memory' is not set, it defaults to True if CUDA is available.
225
+
226
+ Parameters
227
+ ----------
228
+ dataloader_params : dict of {str: Any}
229
+ The dataloader parameters.
230
+
231
+ Returns
232
+ -------
233
+ dict of {str: Any}
234
+ The dataloader parameters with defaults applied.
235
+ """
236
+ if "num_workers" not in dataloader_params:
237
+ # Use 1 worker during tests, otherwise use all available CPU cores
238
+ if "pytest" in sys.modules:
239
+ dataloader_params["num_workers"] = 0
240
+ else:
241
+ dataloader_params["num_workers"] = os.cpu_count()
242
+
243
+ if "pin_memory" not in dataloader_params:
244
+ import torch
245
+
246
+ dataloader_params["pin_memory"] = torch.cuda.is_available()
247
+
248
+ return dataloader_params
249
+
213
250
  @field_validator("train_dataloader_params")
214
251
  @classmethod
215
252
  def shuffle_train_dataloader(
@@ -51,9 +51,7 @@ class OptimizerModel(BaseModel):
51
51
 
52
52
  # Optional parameters, empty dict default value to allow filtering dictionary
53
53
  parameters: dict = Field(
54
- default={
55
- "lr": 1e-4,
56
- },
54
+ default={},
57
55
  validate_default=True,
58
56
  )
59
57
  """Parameters of the optimizer, see PyTorch documentation for more details."""
@@ -39,8 +39,6 @@ class TrainingConfig(BaseModel):
39
39
  """Maximum number of steps to train for. -1 means no limit."""
40
40
  check_val_every_n_epoch: int = Field(default=1, ge=1)
41
41
  """Validation step frequency."""
42
- enable_progress_bar: bool = Field(default=True)
43
- """Whether to enable the progress bar."""
44
42
  accumulate_grad_batches: int = Field(default=1, ge=1)
45
43
  """Number of batches to accumulate gradients over before stepping the optimizer."""
46
44
  gradient_clip_val: Optional[Union[int, float]] = None
@@ -21,9 +21,13 @@ def compute_normalization_stats(image: NDArray) -> tuple[NDArray, NDArray]:
21
21
  tuple of (list of floats, list of floats)
22
22
  Lists of mean and standard deviation values per channel.
23
23
  """
24
- # Define the list of axes excluding the channel axis
25
- axes = tuple(np.delete(np.arange(image.ndim), 1))
26
- return np.mean(image, axis=axes), np.std(image, axis=axes)
24
+ # Define the lists for storing mean and std values
25
+ means, stds = [], []
26
+ # Iterate over the channels dimension and compute mean and std
27
+ for ax in range(image.shape[1]):
28
+ means.append(image[:, ax, ...].mean())
29
+ stds.append(image[:, ax, ...].std())
30
+ return np.stack(means), np.stack(stds)
27
31
 
28
32
 
29
33
  def update_iterative_stats(
@@ -0,0 +1,212 @@
1
+ # The CAREamics Dataset
2
+
3
+ Welcome to the CAREamics dataset!
4
+
5
+ A PyTorch based dataset, designed to be used with microscopy data. It is universal for the training, validation and prediction stages of a machine learning pipeline.
6
+
7
+ The key ethos is to create a modular and maintainable dataset comprised of swappable components that interact through interfaces. This should facilitate a smooth development process when extending the dataset's function to new features, and also enable advanced users to easily customize the dataset to their needs, by writing custom components. This is achieved by following a few key software engineering principles, detailed at the end of this README file.
8
+
9
+
10
+ ## Dataset Component overview
11
+
12
+ ```mermaid
13
+ ---
14
+ title: CAREamicsDataset
15
+ ---
16
+ classDiagram
17
+ class CAREamicsDataset{
18
+ +PatchExtractor input_extractor
19
+ +Optional[PatchExtractor] target_extractor
20
+ +PatchingStrategy patching_strategy
21
+ +list~Transform~ transforms
22
+ +\_\_getitem\_\_(int index) NDArray
23
+ }
24
+ class PatchingStrategy{
25
+ <<interface>>
26
+ +n_patches int
27
+ +get_patch_spec(index: int) PatchSpecs
28
+ }
29
+ class RandomPatchingStrategy{
30
+ }
31
+ class FixedRandomPatchingStrategy{
32
+ }
33
+ class SequentialPatchingStrategy{
34
+ }
35
+ class TilingStrategy{
36
+ +get_patch_spec(index: int) TileSpecs
37
+ }
38
+
39
+ class PatchExtractor{
40
+ +list~ImageStack~ image_stacks
41
+ +extract_patch(PatchSpecs) NDArray
42
+ }
43
+ class PatchSpecs {
44
+ <<TypedDict>>
45
+ +int data_idx
46
+ +int sample_idx
47
+ +Sequence~int~ coords
48
+ +Sequence~int~ patch_size
49
+ }
50
+ class TileSpecs {
51
+ <<TypedDict>>
52
+ +Sequence~int~ crop_coords
53
+ +Sequence~int~ crop_size
54
+ +Sequence~int~ stitch_coords
55
+ }
56
+
57
+ class ImageStack{
58
+ <<interface>>
59
+ +Union[Path, Literal["array"]] source
60
+ +Sequence~int~ data_shape
61
+ +DTypeLike data_type
62
+ +extract_patch(sample_idx, coords, patch_size) NDArray
63
+ }
64
+ class InMemoryImageStack {
65
+ }
66
+ class ZarrImageStack {
67
+ +Path source
68
+ }
69
+
70
+ CAREamicsDataset --* PatchExtractor: Is composed of
71
+ CAREamicsDataset --* PatchingStrategy: Is composed of
72
+ PatchExtractor --o ImageStack: Aggregates
73
+ ImageStack <|-- InMemoryImageStack: Implements
74
+ ImageStack <|-- ZarrImageStack: Implements
75
+ PatchingStrategy <|-- RandomPatchingStrategy: Implements
76
+ PatchingStrategy <|-- FixedRandomPatchingStrategy: Implements
77
+ PatchingStrategy <|-- SequentialPatchingStrategy: Implements
78
+ PatchingStrategy <|-- TilingStrategy: Implements
79
+ PatchSpecs <|-- TileSpecs: Inherits from
80
+ ```
81
+
82
+ ### `ImageStack` and implementations
83
+
84
+ This interface represents a set of image data, which can be saved with any subset of the
85
+ axes STCZYX, in any order, see below for a description of the dimensions. The `ImageStack`
86
+ interface's job is to act as an adapter for different data storage types, so that higher
87
+ level classes can access the image data without having to know the implementation details of
88
+ how to load or read data from each storage type. This means we can decide to support new storage
89
+ types by implementing a new concrete `ImageStack` class without having to change anything
90
+ in the `CAREamistDataset` class. Advanced users can also choose to create their own
91
+ `ImageStack` class if they want to work with their own data storage type.
92
+
93
+ The interface provides an `extract_patch` method which will produce a patch from the image,
94
+ as a NumPy array, with the dimensions C(Z)YX. This method should be thought of as simply
95
+ a wrapper for the equivalent to NumPy slicing for each of the storage types.
96
+
97
+ #### Concrete implementations
98
+
99
+ - `InMemoryImageStack`: The underlying data is stored as a NumPy array in memory. It has some
100
+ additional constructor methods to load the data from known file formats such as TIFF files.
101
+ - `ZarrImageStack`: The underlying data is stored as a ZARR file on disk.
102
+
103
+ #### Axes description
104
+
105
+ - S is a generic sample dimension,
106
+ - T is a time dimension,
107
+ - C is a channel dimension,
108
+ - Z is a spatial dimension,
109
+ - Y is a spatial dimension,
110
+ - X is a spatial dimension.
111
+
112
+ ### `PatchExtractor`
113
+
114
+ The `PatchExtractor` class aggregates many `ImageStack` instances, this allows for multiple
115
+ images with different dimensions, and possibly different storage types to be treated as a single entity.
116
+ The class has an `extract_patch` method to extract a patch from any one of its `ImageStack`
117
+ objects. It can also possibly be extended when extra logic to extract patches is needed,
118
+ for example when constructing lateral-context inputs for the MicroSplit LVAE models.
119
+
120
+ ### `PatchingStrategy`
121
+
122
+ The `PatchingStrategy` class is an interface to generate patch specifications, where each of the
123
+ concrete implementations produce a set of patch specifications using a different strategy.
124
+
125
+ It has a `n_patches` attribute that can be accessed to find out how many patches the
126
+ strategy will produce, given the shapes of the image stacks it has been initialized with.
127
+ This is needed by the `CAREamicsDataset` to return its length.
128
+
129
+ Most importantly it has a `get_patch_spec` method, that takes an index and returns a
130
+ patch specification. For deterministic patching strategies, this method will always
131
+ return the same patch specification given the same index, but there are also random strategies
132
+ where the returned patch specification will change every time. The given index can never
133
+ be greater than `n_patches`.
134
+
135
+ #### Concrete implementations
136
+
137
+ - `RandomPatchingStrategy`: this strategy will produce random patches that will change
138
+ even if the `extract_patch` method is called with the same index.
139
+ - `FixedRandomPatchingStrategy`: this strategy will produce random patches, but the patch
140
+ will be the same if the `extract_patch` method is called with the same index. This is
141
+ useful for making sure validation is comparable epoch to epoch.
142
+ - `SequentialPatchingStrategy`: this strategy is deterministic and the patches will be
143
+ sequential with some specified overlap.
144
+ - `TilingStrategy`: this strategy is deterministic and the patches will be
145
+ sequential with some specified overlap. Rather than a `PatchSpecs` dictionary it will
146
+ produce a `TileSpecs` dictionary which includes some extra fields that are used for
147
+ stitching the tiles back together.
148
+
149
+ #### PatchSpecs
150
+
151
+ The `get_patch_spec` returns a dictionary containing the keys `data_idx`, `sample_idx`, `coords` and `patch_size`.
152
+ These are the exact arguments that the `PatchExtractor.extract_patch` method takes. The patch specification
153
+ produced by the patching strategy is received by the `PatchExtractor` to in-turn produce an image patch.
154
+
155
+ For type hinting, `PatchSpecs` is defined as a `TypedDict`.
156
+
157
+ ## Key Principles
158
+
159
+ The aim of all these principles is to create a system of interacting classes that have
160
+ low coupling. This allows for one section to be changed or extended without breaking functionality
161
+ elsewhere in the codebase.
162
+
163
+ ### Composition over inheritance
164
+
165
+ The principle of composition over inheritance is: rather than using inheritance to
166
+ extend or change the behavior of a class, instead, a class can be composed of modules
167
+ that can be swapped to extend or change behavior.
168
+
169
+ The reason to use composition is that it promotes the easy reuse of the underlying
170
+ components, it can prevent a subclass explosion, and it leads to a maintainable and
171
+ easily extendable design. A software architecture based on composition is normally
172
+ maintainable and extendable because if a component needs to change then the whole class
173
+ shouldn't have to be refactored and if a new feature needs to be added, usually an additional
174
+ component can be added to the class.
175
+
176
+ The `CAREamicsDataset` is composed of `PatchExtractor` and `PatchingStrategy` and `Transfrom` components.
177
+ The `PatchingStrategy` classes implement an interface so the dataset can switch between
178
+ different strategies. The `PatchExtractor` is composed of many `ImageStack` instances,
179
+ new image stacks can be added to extend the type of data that the dataset can read from.
180
+
181
+ ### Dependency Inversion
182
+
183
+ The dependency inversion principle states:
184
+
185
+ 1. High-level modules should not depend on low-level modules. Both high-level and
186
+ low-level modules should depend on abstractions (e.g. interfaces).
187
+ 2. Abstractions should not depend on details (concrete implementations). Details should
188
+ depend on abstractions.
189
+
190
+ In other words high level modules that provide complex logic should be easily reusable
191
+ and not depend on implementation details of low-level modules that provide utility functionality.
192
+ This can be achieved by introducing abstractions that decouple high and low level modules.
193
+
194
+ An example of the dependency inversion principle in use is how the `PatchExtractor` only
195
+ depends on the `ImageStack` interface, and does not have to have any knowledge of the
196
+ concrete implementations. The concrete `ImageStack` implementations also do not have
197
+ any knowledge of the `PatchExtractor` or any other higher-level functionality that the
198
+ dataset needs.
199
+
200
+ ### Single Responsibility Principle
201
+
202
+ Each component should have a small scope of responsibility that is easily defined. This
203
+ should make the code easier to maintain and hopefully reduce the number of places in the
204
+ code that have to change when introducing a new feature.
205
+
206
+ - `ImageStack` responsibility: to act as an adapter for loading and reading image data
207
+ from different underlying storage.
208
+ - `PatchExtractor` responsibility: to extract patches from a set of image stacks.
209
+ - `PatchingStrategy` responsibility: to produce patch specifications given an index, through
210
+ an interface that hides the underlying implementation.
211
+ - `CAREamicsDataset` responsibility: to orchestrate the interactions of its underlying
212
+ components to produce an input patch (and target patch when required) given an index.