ngio 0.4.0a1__tar.gz → 0.4.0a3__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 (243) hide show
  1. {ngio-0.4.0a1 → ngio-0.4.0a3}/PKG-INFO +1 -1
  2. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_array_io_pipes.py +11 -6
  3. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_roi.py +59 -7
  4. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/_feature.py +1 -1
  5. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/_image_processing.py +1 -1
  6. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/_rois_utils.py +2 -2
  7. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/_segmentation.py +5 -1
  8. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_abstract_image.py +2 -2
  9. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_ome_zarr_container.py +1 -1
  10. ngio-0.4.0a3/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png +0 -0
  11. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/v1/_roi_table.py +11 -3
  12. ngio-0.4.0a1/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png +0 -0
  13. {ngio-0.4.0a1 → ngio-0.4.0a3}/.copier-answers.yml +0 -0
  14. {ngio-0.4.0a1 → ngio-0.4.0a3}/.gitattributes +0 -0
  15. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/ISSUE_TEMPLATE.md +0 -0
  16. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/TEST_FAIL_TEMPLATE.md +0 -0
  17. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/dependabot.yml +0 -0
  18. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/pull_request_template.md +0 -0
  19. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/workflows/build_docs.yml +0 -0
  20. {ngio-0.4.0a1 → ngio-0.4.0a3}/.github/workflows/ci.yml +0 -0
  21. {ngio-0.4.0a1 → ngio-0.4.0a3}/.gitignore +0 -0
  22. {ngio-0.4.0a1 → ngio-0.4.0a3}/.pre-commit-config.yaml +0 -0
  23. {ngio-0.4.0a1 → ngio-0.4.0a3}/CHANGELOG.md +0 -0
  24. {ngio-0.4.0a1 → ngio-0.4.0a3}/LICENSE +0 -0
  25. {ngio-0.4.0a1 → ngio-0.4.0a3}/README.md +0 -0
  26. {ngio-0.4.0a1 → ngio-0.4.0a3}/_typos.toml +0 -0
  27. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/hcs.md +0 -0
  28. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/images.md +0 -0
  29. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/common.md +0 -0
  30. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/hcs.md +0 -0
  31. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/images.md +0 -0
  32. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/ngio.md +0 -0
  33. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/tables.md +0 -0
  34. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ngio/utils.md +0 -0
  35. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/ome_zarr_container.md +0 -0
  36. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/api/tables.md +0 -0
  37. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/changelog.md +0 -0
  38. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/code_of_conduct.md +0 -0
  39. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/contributing.md +0 -0
  40. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/0_quickstart.md +0 -0
  41. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/1_ome_zarr_containers.md +0 -0
  42. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/2_images.md +0 -0
  43. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/3_tables.md +0 -0
  44. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/4_masked_images.md +0 -0
  45. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/getting_started/5_hcs.md +0 -0
  46. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/index.md +0 -0
  47. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/backend.md +0 -0
  48. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/overview.md +0 -0
  49. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/condition_table.md +0 -0
  50. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/custom_table.md +0 -0
  51. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/feature_table.md +0 -0
  52. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/generic_table.md +0 -0
  53. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/masking_roi_table.md +0 -0
  54. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/table_specs/table_types/roi_table.md +0 -0
  55. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/tutorials/create_ome_zarr.ipynb +0 -0
  56. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/tutorials/feature_extraction.ipynb +0 -0
  57. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/tutorials/hcs_exploration.ipynb +0 -0
  58. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/tutorials/image_processing.ipynb +0 -0
  59. {ngio-0.4.0a1 → ngio-0.4.0a3}/docs/tutorials/image_segmentation.ipynb +0 -0
  60. {ngio-0.4.0a1 → ngio-0.4.0a3}/mkdocs.yml +0 -0
  61. {ngio-0.4.0a1 → ngio-0.4.0a3}/pyproject.toml +0 -0
  62. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/__init__.py +0 -0
  63. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/__init__.py +0 -0
  64. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_array_io_utils.py +0 -0
  65. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_dimensions.py +0 -0
  66. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_masking_roi.py +0 -0
  67. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_pyramid.py +0 -0
  68. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_synt_images_utils.py +0 -0
  69. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/_zoom.py +0 -0
  70. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/transforms/__init__.py +0 -0
  71. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/transforms/_label.py +0 -0
  72. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/common/transforms/_zoom.py +0 -0
  73. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/__init__.py +0 -0
  74. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/__init__.py +0 -0
  75. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/experimental/iterators/_abstract_iterator.py +0 -0
  76. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/hcs/__init__.py +0 -0
  77. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/hcs/_plate.py +0 -0
  78. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/__init__.py +0 -0
  79. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_create.py +0 -0
  80. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_create_synt_container.py +0 -0
  81. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_image.py +0 -0
  82. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_label.py +0 -0
  83. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_masked_image.py +0 -0
  84. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/images/_table_ops.py +0 -0
  85. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/__init__.py +0 -0
  86. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/_meta_handlers.py +0 -0
  87. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/__init__.py +0 -0
  88. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_axes.py +0 -0
  89. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_channels.py +0 -0
  90. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_dataset.py +0 -0
  91. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +0 -0
  92. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +0 -0
  93. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +0 -0
  94. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/v04/__init__.py +0 -0
  95. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/v04/_custom_models.py +0 -0
  96. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/ome_zarr_meta/v04/_v04_spec_utils.py +0 -0
  97. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png +0 -0
  98. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg +0 -0
  99. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/resources/__init__.py +0 -0
  100. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/resources/resource_model.py +0 -0
  101. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/__init__.py +0 -0
  102. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/_abstract_table.py +0 -0
  103. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/_tables_container.py +0 -0
  104. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/__init__.py +0 -0
  105. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_abstract_backend.py +0 -0
  106. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_anndata.py +0 -0
  107. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_anndata_utils.py +0 -0
  108. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_csv.py +0 -0
  109. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_json.py +0 -0
  110. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_non_zarr_backends.py +0 -0
  111. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_parquet.py +0 -0
  112. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_table_backends.py +0 -0
  113. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/backends/_utils.py +0 -0
  114. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/v1/__init__.py +0 -0
  115. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/v1/_condition_table.py +0 -0
  116. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/v1/_feature_table.py +0 -0
  117. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/tables/v1/_generic_table.py +0 -0
  118. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/__init__.py +0 -0
  119. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/_datasets.py +0 -0
  120. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/_errors.py +0 -0
  121. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/_fractal_fsspec_store.py +0 -0
  122. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/_logger.py +0 -0
  123. {ngio-0.4.0a1 → ngio-0.4.0a3}/src/ngio/utils/_zarr_utils.py +0 -0
  124. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/conftest.py +0 -0
  125. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +0 -0
  126. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +0 -0
  127. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +0 -0
  128. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +0 -0
  129. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +0 -0
  130. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +0 -0
  131. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +0 -0
  132. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +0 -0
  133. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +0 -0
  134. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +0 -0
  135. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/.zattrs +0 -0
  136. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/.zgroup +0 -0
  137. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +0 -0
  138. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +0 -0
  139. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +0 -0
  140. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +0 -0
  141. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +0 -0
  142. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +0 -0
  143. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +0 -0
  144. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +0 -0
  145. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/.zattrs +0 -0
  146. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/.zgroup +0 -0
  147. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +0 -0
  148. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +0 -0
  149. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +0 -0
  150. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +0 -0
  151. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +0 -0
  152. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +0 -0
  153. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +0 -0
  154. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +0 -0
  155. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +0 -0
  156. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +0 -0
  157. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +0 -0
  158. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +0 -0
  159. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +0 -0
  160. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +0 -0
  161. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +0 -0
  162. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +0 -0
  163. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +0 -0
  164. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +0 -0
  165. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +0 -0
  166. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +0 -0
  167. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +0 -0
  168. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +0 -0
  169. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +0 -0
  170. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +0 -0
  171. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +0 -0
  172. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +0 -0
  173. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +0 -0
  174. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +0 -0
  175. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/.zattrs +0 -0
  176. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/.zgroup +0 -0
  177. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +0 -0
  178. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +0 -0
  179. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +0 -0
  180. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +0 -0
  181. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +0 -0
  182. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +0 -0
  183. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +0 -0
  184. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +0 -0
  185. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +0 -0
  186. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +0 -0
  187. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +0 -0
  188. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +0 -0
  189. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +0 -0
  190. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +0 -0
  191. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +0 -0
  192. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +0 -0
  193. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +0 -0
  194. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +0 -0
  195. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/.zattrs +0 -0
  196. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/.zgroup +0 -0
  197. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/0/.zarray +0 -0
  198. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/1/.zarray +0 -0
  199. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +0 -0
  200. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +0 -0
  201. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +0 -0
  202. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +0 -0
  203. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +0 -0
  204. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +0 -0
  205. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/.zattrs +0 -0
  206. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/.zgroup +0 -0
  207. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +0 -0
  208. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +0 -0
  209. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +0 -0
  210. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +0 -0
  211. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +0 -0
  212. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +0 -0
  213. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +0 -0
  214. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +0 -0
  215. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/meta/base_ome_zarr_image_meta.json +0 -0
  216. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/meta/base_ome_zarr_image_meta_wrong_axis_order.json +0 -0
  217. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/meta/base_ome_zarr_label_meta.json +0 -0
  218. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/meta/base_ome_zarr_well_meta.json +0 -0
  219. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/data/v04/meta/ome_zarr_well_path_normalization_meta.json +0 -0
  220. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/common/test_dimensions.py +0 -0
  221. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/common/test_pyramid.py +0 -0
  222. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/common/test_roi.py +0 -0
  223. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/common/test_transforms.py +0 -0
  224. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/hcs/test_plate.py +0 -0
  225. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/hcs/test_well.py +0 -0
  226. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/images/test_create.py +0 -0
  227. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/images/test_images.py +0 -0
  228. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/images/test_masked_images.py +0 -0
  229. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/images/test_omezarr_container.py +0 -0
  230. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/images/test_table_ops.py +0 -0
  231. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/iterators/test_iterators.py +0 -0
  232. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/ome_zarr_meta/test_image_handler.py +0 -0
  233. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/ome_zarr_meta/test_unit_ngio_specs.py +0 -0
  234. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/ome_zarr_meta/test_unit_v04_utils.py +0 -0
  235. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_backends.py +0 -0
  236. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_backends_utils.py +0 -0
  237. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_feature_table.py +0 -0
  238. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_generic_table.py +0 -0
  239. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_masking_roi_table_v1.py +0 -0
  240. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_roi_table_v1.py +0 -0
  241. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/tables/test_table_group.py +0 -0
  242. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/utils/test_download_datasets.py +0 -0
  243. {ngio-0.4.0a1 → ngio-0.4.0a3}/tests/unit/utils/test_zarr_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ngio
3
- Version: 0.4.0a1
3
+ Version: 0.4.0a3
4
4
  Summary: Next Generation file format IO
5
5
  Project-URL: homepage, https://github.com/BioVisionCenter/ngio
6
6
  Project-URL: repository, https://github.com/BioVisionCenter/ngio
@@ -87,6 +87,7 @@ def build_numpy_getter(
87
87
  slicing_dict=slicing_dict,
88
88
  remove_channel_selection=remove_channel_selection,
89
89
  )
90
+
90
91
  return lambda: _numpy_get_pipe(
91
92
  zarr_array=zarr_array,
92
93
  slicing_ops=slicing_ops,
@@ -285,6 +286,7 @@ def build_masked_numpy_getter(
285
286
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
286
287
  fill_value: int | float = 0,
287
288
  allow_scaling: bool = True,
289
+ remove_channel_selection: bool = False,
288
290
  ) -> Callable[[], np.ndarray]:
289
291
  """Get a numpy array from the zarr array with the given slice kwargs."""
290
292
  slicing_dict = slicing_dict or {}
@@ -296,7 +298,7 @@ def build_masked_numpy_getter(
296
298
  axes_order=axes_order,
297
299
  transforms=transforms,
298
300
  slicing_dict=slicing_dict,
299
- remove_channel_selection=False,
301
+ remove_channel_selection=remove_channel_selection,
300
302
  )
301
303
 
302
304
  label_data_getter = build_numpy_getter(
@@ -379,6 +381,7 @@ def build_masked_dask_getter(
379
381
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
380
382
  fill_value: int | float = 0,
381
383
  allow_scaling: bool = True,
384
+ remove_channel_selection: bool = False,
382
385
  ) -> Callable[[], DaskArray]:
383
386
  """Get a dask array from the zarr array with the given slice kwargs."""
384
387
  slicing_dict = slicing_dict or {}
@@ -390,7 +393,7 @@ def build_masked_dask_getter(
390
393
  axes_order=axes_order,
391
394
  transforms=transforms,
392
395
  slicing_dict=slicing_dict,
393
- remove_channel_selection=False,
396
+ remove_channel_selection=remove_channel_selection,
394
397
  )
395
398
 
396
399
  label_data_getter = build_dask_getter(
@@ -433,6 +436,7 @@ def build_masked_numpy_setter(
433
436
  data_getter: Callable[[], np.ndarray] | None = None,
434
437
  label_data_getter: Callable[[], np.ndarray] | None = None,
435
438
  allow_scaling: bool = True,
439
+ remove_channel_selection: bool = False,
436
440
  ) -> Callable[[np.ndarray], None]:
437
441
  """Set a numpy array to the zarr array with the given slice kwargs."""
438
442
  slicing_dict = slicing_dict or {}
@@ -445,7 +449,7 @@ def build_masked_numpy_setter(
445
449
  axes_order=axes_order,
446
450
  transforms=transforms,
447
451
  slicing_dict=slicing_dict,
448
- remove_channel_selection=False,
452
+ remove_channel_selection=remove_channel_selection,
449
453
  )
450
454
 
451
455
  if label_data_getter is None:
@@ -464,7 +468,7 @@ def build_masked_numpy_setter(
464
468
  axes_order=axes_order,
465
469
  transforms=transforms,
466
470
  slicing_dict=slicing_dict,
467
- remove_channel_selection=False,
471
+ remove_channel_selection=remove_channel_selection,
468
472
  )
469
473
 
470
474
  def set_patch_masked_as_numpy(patch: np.ndarray) -> None:
@@ -498,6 +502,7 @@ def build_masked_dask_setter(
498
502
  data_getter: Callable[[], DaskArray] | None = None,
499
503
  label_data_getter: Callable[[], DaskArray] | None = None,
500
504
  allow_scaling: bool = True,
505
+ remove_channel_selection: bool = False,
501
506
  ) -> Callable[[DaskArray], None]:
502
507
  """Set a dask array to the zarr array with the given slice kwargs."""
503
508
  slicing_dict = slicing_dict or {}
@@ -510,7 +515,7 @@ def build_masked_dask_setter(
510
515
  axes_order=axes_order,
511
516
  transforms=transforms,
512
517
  slicing_dict=slicing_dict,
513
- remove_channel_selection=False,
518
+ remove_channel_selection=remove_channel_selection,
514
519
  )
515
520
 
516
521
  if label_data_getter is None:
@@ -529,7 +534,7 @@ def build_masked_dask_setter(
529
534
  axes_order=axes_order,
530
535
  transforms=transforms,
531
536
  slicing_dict=slicing_dict,
532
- remove_channel_selection=False,
537
+ remove_channel_selection=remove_channel_selection,
533
538
  )
534
539
 
535
540
  def set_patch_masked_as_dask(patch: DaskArray) -> None:
@@ -49,7 +49,7 @@ T = TypeVar("T", int, float)
49
49
  class GenericRoi(BaseModel, Generic[T]):
50
50
  """A generic Region of Interest (ROI) model."""
51
51
 
52
- name: str
52
+ name: str | None
53
53
  x: T
54
54
  y: T
55
55
  z: T | None = None
@@ -67,6 +67,38 @@ class GenericRoi(BaseModel, Generic[T]):
67
67
  """Calculate the intersection of this ROI with another ROI."""
68
68
  return roi_intersection(self, other)
69
69
 
70
+ def _nice_str(self) -> str:
71
+ if self.t is not None:
72
+ t_str = f"t={self.t}->{self.t_length}"
73
+ else:
74
+ t_str = "t=None"
75
+ if self.z is not None:
76
+ z_str = f"z={self.z}->{self.z_length}"
77
+ else:
78
+ z_str = "z=None"
79
+
80
+ y_str = f"y={self.y}->{self.y_length}"
81
+ x_str = f"x={self.x}->{self.x_length}"
82
+
83
+ if self.label is not None:
84
+ label_str = f", label={self.label}"
85
+ else:
86
+ label_str = ""
87
+ cls_name = self.__class__.__name__
88
+ return f"{cls_name}({t_str}, {z_str}, {y_str}, {x_str}{label_str})"
89
+
90
+ def get_name(self) -> str:
91
+ """Get the name of the ROI, or a default if not set."""
92
+ if self.name is not None:
93
+ return self.name
94
+ return self._nice_str()
95
+
96
+ def __repr__(self) -> str:
97
+ return self._nice_str()
98
+
99
+ def __str__(self) -> str:
100
+ return self._nice_str()
101
+
70
102
 
71
103
  def _1d_intersection(
72
104
  a: T | None, a_length: T | None, b: T | None, b_length: T | None
@@ -113,11 +145,17 @@ def roi_intersection(
113
145
  x, x_length = _1d_intersection(
114
146
  ref_roi.x, ref_roi.x_length, other_roi.x, other_roi.x_length
115
147
  )
148
+ if x is None and x_length is None:
149
+ # No intersection
150
+ return None
116
151
  assert x is not None and x_length is not None
117
152
 
118
153
  y, y_length = _1d_intersection(
119
154
  ref_roi.y, ref_roi.y_length, other_roi.y, other_roi.y_length
120
155
  )
156
+ if y is None and y_length is None:
157
+ # No intersection
158
+ return None
121
159
  assert y is not None and y_length is not None
122
160
 
123
161
  z, z_length = _1d_intersection(
@@ -127,11 +165,8 @@ def roi_intersection(
127
165
  ref_roi.t, ref_roi.t_length, other_roi.t, other_roi.t_length
128
166
  )
129
167
 
130
- if (
131
- x_length <= 0
132
- or y_length <= 0
133
- or (z_length is not None and z_length <= 0)
134
- or (t_length is not None and t_length <= 0)
168
+ if (z_length is not None and z_length <= 0) or (
169
+ t_length is not None and t_length <= 0
135
170
  ):
136
171
  # No intersection
137
172
  return None
@@ -144,9 +179,14 @@ def roi_intersection(
144
179
  )
145
180
  label = ref_roi.label or other_roi.label
146
181
 
182
+ if ref_roi.name is not None and other_roi.name is not None:
183
+ name = f"{ref_roi.name}:{other_roi.name}"
184
+ else:
185
+ name = ref_roi.name or other_roi.name
186
+
147
187
  cls_ref = ref_roi.__class__
148
188
  return cls_ref(
149
- name=f"[{ref_roi.name}_x_{other_roi.name}]",
189
+ name=name,
150
190
  x=x,
151
191
  y=y,
152
192
  z=z,
@@ -412,6 +452,7 @@ def build_roi_numpy_setter(
412
452
  axes_order: Sequence[str] | None = None,
413
453
  transforms: Sequence[TransformProtocol] | None = None,
414
454
  slicing_dict: dict[str, SlicingInputType] | None = None,
455
+ remove_channel_selection: bool = False,
415
456
  ) -> Callable[[np.ndarray], None]:
416
457
  """Prepare slice kwargs for setting an array."""
417
458
  input_slice_kwargs = roi_to_slicing_dict(
@@ -426,6 +467,7 @@ def build_roi_numpy_setter(
426
467
  axes_order=axes_order,
427
468
  transforms=transforms,
428
469
  slicing_dict=input_slice_kwargs,
470
+ remove_channel_selection=remove_channel_selection,
429
471
  )
430
472
 
431
473
 
@@ -464,6 +506,7 @@ def build_roi_dask_setter(
464
506
  axes_order: Sequence[str] | None = None,
465
507
  transforms: Sequence[TransformProtocol] | None = None,
466
508
  slicing_dict: dict[str, SlicingInputType] | None = None,
509
+ remove_channel_selection: bool = False,
467
510
  ) -> Callable[[da.Array], None]:
468
511
  """Prepare slice kwargs for setting an array."""
469
512
  input_slice_kwargs = roi_to_slicing_dict(
@@ -478,6 +521,7 @@ def build_roi_dask_setter(
478
521
  axes_order=axes_order,
479
522
  transforms=transforms,
480
523
  slicing_dict=input_slice_kwargs,
524
+ remove_channel_selection=remove_channel_selection,
481
525
  )
482
526
 
483
527
 
@@ -504,6 +548,7 @@ def build_roi_masked_numpy_getter(
504
548
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
505
549
  fill_value: int | float = 0,
506
550
  allow_scaling: bool = True,
551
+ remove_channel_selection: bool = False,
507
552
  ) -> Callable[[], np.ndarray]:
508
553
  """Prepare slice kwargs for getting a masked array."""
509
554
  input_slice_kwargs = roi_to_slicing_dict(
@@ -531,6 +576,7 @@ def build_roi_masked_numpy_getter(
531
576
  label_slicing_dict=label_slice_kwargs,
532
577
  fill_value=fill_value,
533
578
  allow_scaling=allow_scaling,
579
+ remove_channel_selection=remove_channel_selection,
534
580
  )
535
581
 
536
582
 
@@ -549,6 +595,7 @@ def build_roi_masked_numpy_setter(
549
595
  slicing_dict: dict[str, SlicingInputType] | None = None,
550
596
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
551
597
  allow_scaling: bool = True,
598
+ remove_channel_selection: bool = False,
552
599
  ) -> Callable[[np.ndarray], None]:
553
600
  """Prepare slice kwargs for setting a masked array."""
554
601
  input_slice_kwargs = roi_to_slicing_dict(
@@ -575,6 +622,7 @@ def build_roi_masked_numpy_setter(
575
622
  slicing_dict=input_slice_kwargs,
576
623
  label_slicing_dict=label_slice_kwargs,
577
624
  allow_scaling=allow_scaling,
625
+ remove_channel_selection=remove_channel_selection,
578
626
  )
579
627
 
580
628
 
@@ -593,6 +641,7 @@ def build_roi_masked_dask_getter(
593
641
  slicing_dict: dict[str, SlicingInputType] | None = None,
594
642
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
595
643
  allow_scaling: bool = True,
644
+ remove_channel_selection: bool = False,
596
645
  ) -> Callable[[], da.Array]:
597
646
  """Prepare slice kwargs for getting a masked array."""
598
647
  input_slice_kwargs = roi_to_slicing_dict(
@@ -619,6 +668,7 @@ def build_roi_masked_dask_getter(
619
668
  slicing_dict=input_slice_kwargs,
620
669
  label_slicing_dict=label_slice_kwargs,
621
670
  allow_scaling=allow_scaling,
671
+ remove_channel_selection=remove_channel_selection,
622
672
  )
623
673
 
624
674
 
@@ -637,6 +687,7 @@ def build_roi_masked_dask_setter(
637
687
  slicing_dict: dict[str, SlicingInputType] | None = None,
638
688
  label_slicing_dict: dict[str, SlicingInputType] | None = None,
639
689
  allow_scaling: bool = True,
690
+ remove_channel_selection: bool = False,
640
691
  ) -> Callable[[da.Array], None]:
641
692
  """Prepare slice kwargs for setting a masked array."""
642
693
  input_slice_kwargs = roi_to_slicing_dict(
@@ -663,4 +714,5 @@ def build_roi_masked_dask_setter(
663
714
  slicing_dict=input_slice_kwargs,
664
715
  label_slicing_dict=label_slice_kwargs,
665
716
  allow_scaling=allow_scaling,
717
+ remove_channel_selection=remove_channel_selection,
666
718
  )
@@ -47,7 +47,7 @@ class FeatureExtractorIterator(AbstractIteratorBuilder):
47
47
  self._input = input_image
48
48
  self._input_label = input_label
49
49
  self._ref_image = input_image
50
- self._rois = input_image.build_image_roi_table().rois()
50
+ self._rois = input_image.build_image_roi_table(name=None).rois()
51
51
 
52
52
  # Set iteration parameters
53
53
  self._input_slicing_kwargs = add_channel_selection_to_slicing_dict(
@@ -53,7 +53,7 @@ class ImageProcessingIterator(AbstractIteratorBuilder):
53
53
  self._input = input_image
54
54
  self._output = output_image
55
55
  self._ref_image = input_image
56
- self._rois = input_image.build_image_roi_table().rois()
56
+ self._rois = input_image.build_image_roi_table(name=None).rois()
57
57
 
58
58
  # Set iteration parameters
59
59
  self._input_slicing_kwargs = add_channel_selection_to_slicing_dict(
@@ -24,7 +24,7 @@ def grid(
24
24
  stride_y: int | None = None,
25
25
  stride_z: int | None = None,
26
26
  stride_t: int | None = None,
27
- base_name: str = "",
27
+ base_name: str | None = None,
28
28
  ) -> list[Roi]:
29
29
  """This method is a placeholder for creating a regular grid of ROIs."""
30
30
  t_dim = ref_image.dimensions.get("t", default=1)
@@ -49,7 +49,7 @@ def grid(
49
49
  for y in range(0, y_dim, stride_y):
50
50
  for x in range(0, x_dim, stride_x):
51
51
  roi = RoiPixels(
52
- name=f"{base_name}({t}, {z}, {y}, {x})",
52
+ name=base_name,
53
53
  x=x,
54
54
  y=y,
55
55
  z=z,
@@ -55,7 +55,7 @@ class SegmentationIterator(AbstractIteratorBuilder):
55
55
  self._input = input_image
56
56
  self._output = output_label
57
57
  self._ref_image = input_image
58
- self._rois = input_image.build_image_roi_table().rois()
58
+ self._rois = input_image.build_image_roi_table(name=None).rois()
59
59
 
60
60
  # Set iteration parameters
61
61
  self._input_slicing_kwargs = add_channel_selection_to_slicing_dict(
@@ -103,6 +103,7 @@ class SegmentationIterator(AbstractIteratorBuilder):
103
103
  transforms=self._output_transforms,
104
104
  pixel_size=self._output.pixel_size,
105
105
  roi=roi,
106
+ remove_channel_selection=True,
106
107
  )
107
108
 
108
109
  def build_dask_getter(self, roi: Roi):
@@ -124,6 +125,7 @@ class SegmentationIterator(AbstractIteratorBuilder):
124
125
  transforms=self._output_transforms,
125
126
  pixel_size=self._output.pixel_size,
126
127
  roi=roi,
128
+ remove_channel_selection=True,
127
129
  )
128
130
 
129
131
  def post_consolidate(self):
@@ -245,6 +247,7 @@ class MaskedSegmentationIterator(SegmentationIterator):
245
247
  axes_order=self._axes_order,
246
248
  transforms=self._output_transforms,
247
249
  pixel_size=self._output.pixel_size,
250
+ remove_channel_selection=True,
248
251
  )
249
252
 
250
253
  def build_dask_getter(self, roi: Roi):
@@ -272,6 +275,7 @@ class MaskedSegmentationIterator(SegmentationIterator):
272
275
  axes_order=self._axes_order,
273
276
  transforms=self._output_transforms,
274
277
  pixel_size=self._output.pixel_size,
278
+ remove_channel_selection=True,
275
279
  )
276
280
 
277
281
  def post_consolidate(self):
@@ -445,7 +445,7 @@ class AbstractImage(Generic[_image_handler]):
445
445
  """
446
446
  consolidate_image(image=self, order=order, mode=mode)
447
447
 
448
- def build_image_roi_table(self, name: str = "image") -> RoiTable:
448
+ def build_image_roi_table(self, name: str | None = "image") -> RoiTable:
449
449
  """Build the ROI table for an image."""
450
450
  return build_image_roi_table(image=self, name=name)
451
451
 
@@ -467,7 +467,7 @@ def consolidate_image(
467
467
  )
468
468
 
469
469
 
470
- def build_image_roi_table(image: AbstractImage, name: str = "image") -> RoiTable:
470
+ def build_image_roi_table(image: AbstractImage, name: str | None = "image") -> RoiTable:
471
471
  """Build the ROI table for an image."""
472
472
  dim_x = image.dimensions.get("x")
473
473
  dim_y = image.dimensions.get("y")
@@ -589,7 +589,7 @@ class OmeZarrContainer:
589
589
  backend=backend,
590
590
  )
591
591
 
592
- def build_image_roi_table(self, name: str = "image") -> RoiTable:
592
+ def build_image_roi_table(self, name: str | None = "image") -> RoiTable:
593
593
  """Compute the ROI table for an image."""
594
594
  return self.get_image().build_image_roi_table(name=name)
595
595
 
@@ -6,6 +6,7 @@ https://fractal-analytics-platform.github.io/fractal-tasks-core/tables/
6
6
 
7
7
  from collections.abc import Iterable
8
8
  from typing import Literal
9
+ from uuid import uuid4
9
10
 
10
11
  import pandas as pd
11
12
  from pydantic import BaseModel
@@ -146,7 +147,7 @@ def _rois_to_dataframe(rois: dict[str, Roi], index_key: str | None) -> pd.DataFr
146
147
  len_z_micrometer = roi.z_length if roi.z_length is not None else 1.0
147
148
 
148
149
  row = {
149
- index_key: roi.name,
150
+ index_key: roi.get_name(),
150
151
  "x_micrometer": roi.x,
151
152
  "y_micrometer": roi.y,
152
153
  "z_micrometer": z_micrometer,
@@ -179,8 +180,15 @@ class RoiDictWrapper:
179
180
  """A wrapper for a dictionary of ROIs to provide a consistent interface."""
180
181
 
181
182
  def __init__(self, rois: Iterable[Roi]) -> None:
182
- self._rois_by_name = {roi.name: roi for roi in rois}
183
- self._rois_by_label = {roi.label: roi for roi in rois if roi.label is not None}
183
+ self._rois_by_name = {}
184
+ self._rois_by_label = {}
185
+ for roi in rois:
186
+ name = roi.get_name()
187
+ if name in self._rois_by_name:
188
+ name = f"{name}_{uuid4().hex[:8]}"
189
+ self._rois_by_name[name] = roi
190
+ if roi.label is not None:
191
+ self._rois_by_label[roi.label] = roi
184
192
 
185
193
  def get_by_name(self, name: str, default: Roi | None = None) -> Roi | None:
186
194
  """Get an ROI by its name."""
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes