ngio 0.5.0a3__tar.gz → 0.5.0b1__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 (439) hide show
  1. {ngio-0.5.0a3 → ngio-0.5.0b1}/PKG-INFO +1 -1
  2. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_abstract_image.py +9 -8
  3. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_image.py +9 -1
  4. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_label.py +42 -22
  5. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_ome_zarr_container.py +15 -5
  6. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/__init__.py +6 -0
  7. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/_meta_handlers.py +88 -1
  8. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/__init__.py +2 -0
  9. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +7 -0
  10. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v04/__init__.py +4 -0
  11. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v04/_v04_spec.py +34 -3
  12. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v05/__init__.py +4 -0
  13. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v05/_v05_spec.py +39 -3
  14. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_anndata.py +1 -0
  15. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/_zarr_utils.py +11 -8
  16. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/images/test_create.py +91 -0
  17. {ngio-0.5.0a3 → ngio-0.5.0b1}/.copier-answers.yml +0 -0
  18. {ngio-0.5.0a3 → ngio-0.5.0b1}/.gitattributes +0 -0
  19. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/ISSUE_TEMPLATE.md +0 -0
  20. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/TEST_FAIL_TEMPLATE.md +0 -0
  21. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/dependabot.yml +0 -0
  22. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/pull_request_template.md +0 -0
  23. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/workflows/build_docs.yml +0 -0
  24. {ngio-0.5.0a3 → ngio-0.5.0b1}/.github/workflows/ci.yml +0 -0
  25. {ngio-0.5.0a3 → ngio-0.5.0b1}/.gitignore +0 -0
  26. {ngio-0.5.0a3 → ngio-0.5.0b1}/.pre-commit-config.yaml +0 -0
  27. {ngio-0.5.0a3 → ngio-0.5.0b1}/CHANGELOG.md +0 -0
  28. {ngio-0.5.0a3 → ngio-0.5.0b1}/LICENSE +0 -0
  29. {ngio-0.5.0a3 → ngio-0.5.0b1}/README.md +0 -0
  30. {ngio-0.5.0a3 → ngio-0.5.0b1}/_typos.toml +0 -0
  31. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/hcs.md +0 -0
  32. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/images.md +0 -0
  33. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/iterators.md +0 -0
  34. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/common.md +0 -0
  35. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/hcs.md +0 -0
  36. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/images.md +0 -0
  37. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/io_pipes.md +0 -0
  38. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/iterators.md +0 -0
  39. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/ngio.md +0 -0
  40. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/tables.md +0 -0
  41. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/transforms.md +0 -0
  42. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ngio/utils.md +0 -0
  43. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/ome_zarr_container.md +0 -0
  44. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/api/tables.md +0 -0
  45. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/changelog.md +0 -0
  46. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/code_of_conduct.md +0 -0
  47. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/contributing.md +0 -0
  48. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/0_quickstart.md +0 -0
  49. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/1_ome_zarr_containers.md +0 -0
  50. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/2_images.md +0 -0
  51. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/3_tables.md +0 -0
  52. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/4_masked_images.md +0 -0
  53. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/5_hcs.md +0 -0
  54. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/getting_started/6_iterators.md +0 -0
  55. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/index.md +0 -0
  56. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/backend.md +0 -0
  57. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/overview.md +0 -0
  58. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/condition_table.md +0 -0
  59. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/custom_table.md +0 -0
  60. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/feature_table.md +0 -0
  61. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/generic_table.md +0 -0
  62. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/masking_roi_table.md +0 -0
  63. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/table_specs/table_types/roi_table.md +0 -0
  64. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/tutorials/create_ome_zarr.ipynb +0 -0
  65. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/tutorials/feature_extraction.ipynb +0 -0
  66. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/tutorials/hcs_exploration.ipynb +0 -0
  67. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/tutorials/image_processing.ipynb +0 -0
  68. {ngio-0.5.0a3 → ngio-0.5.0b1}/docs/tutorials/image_segmentation.ipynb +0 -0
  69. {ngio-0.5.0a3 → ngio-0.5.0b1}/mkdocs.yml +0 -0
  70. {ngio-0.5.0a3 → ngio-0.5.0b1}/pyproject.toml +0 -0
  71. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/__init__.py +0 -0
  72. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/__init__.py +0 -0
  73. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_dimensions.py +0 -0
  74. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_masking_roi.py +0 -0
  75. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_pyramid.py +0 -0
  76. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_roi.py +0 -0
  77. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_synt_images_utils.py +0 -0
  78. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/common/_zoom.py +0 -0
  79. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/__init__.py +0 -0
  80. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/__init__.py +0 -0
  81. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_abstract_iterator.py +0 -0
  82. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_feature.py +0 -0
  83. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_image_processing.py +0 -0
  84. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_mappers.py +0 -0
  85. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_rois_utils.py +0 -0
  86. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_segmentation.py +0 -0
  87. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/hcs/__init__.py +0 -0
  88. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/hcs/_plate.py +0 -0
  89. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/__init__.py +0 -0
  90. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_create_synt_container.py +0 -0
  91. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_create_utils.py +0 -0
  92. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_masked_image.py +0 -0
  93. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/images/_table_ops.py +0 -0
  94. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/__init__.py +0 -0
  95. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes.py +0 -0
  96. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_masked.py +0 -0
  97. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_roi.py +0 -0
  98. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_types.py +0 -0
  99. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_match_shape.py +0 -0
  100. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_axes.py +0 -0
  101. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_slices.py +0 -0
  102. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_slices_utils.py +0 -0
  103. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_transforms.py +0 -0
  104. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/io_pipes/_zoom_transform.py +0 -0
  105. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_axes.py +0 -0
  106. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_channels.py +0 -0
  107. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_dataset.py +0 -0
  108. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +0 -0
  109. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +0 -0
  110. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v04/_custom_models.py +0 -0
  111. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v05/_custom_models.py +0 -0
  112. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png +0 -0
  113. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png +0 -0
  114. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg +0 -0
  115. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/resources/__init__.py +0 -0
  116. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/resources/resource_model.py +0 -0
  117. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/__init__.py +0 -0
  118. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/_abstract_table.py +0 -0
  119. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/_tables_container.py +0 -0
  120. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/__init__.py +0 -0
  121. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_abstract_backend.py +0 -0
  122. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_anndata_utils.py +0 -0
  123. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_csv.py +0 -0
  124. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_json.py +0 -0
  125. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_parquet.py +0 -0
  126. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_py_arrow_backends.py +0 -0
  127. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_table_backends.py +0 -0
  128. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/backends/_utils.py +0 -0
  129. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/v1/__init__.py +0 -0
  130. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/v1/_condition_table.py +0 -0
  131. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/v1/_feature_table.py +0 -0
  132. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/v1/_generic_table.py +0 -0
  133. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/tables/v1/_roi_table.py +0 -0
  134. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/transforms/__init__.py +0 -0
  135. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/transforms/_zoom.py +0 -0
  136. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/__init__.py +0 -0
  137. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/_cache.py +0 -0
  138. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/_datasets.py +0 -0
  139. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/_errors.py +0 -0
  140. {ngio-0.5.0a3 → ngio-0.5.0b1}/src/ngio/utils/_fractal_fsspec_store.py +0 -0
  141. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/conftest.py +0 -0
  142. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/create_test_data.py +0 -0
  143. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +0 -0
  144. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +0 -0
  145. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +0 -0
  146. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/0/.zattrs +0 -0
  147. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +0 -0
  148. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/1/.zattrs +0 -0
  149. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +0 -0
  150. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +0 -0
  151. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +0 -0
  152. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +0 -0
  153. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +0 -0
  154. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zattrs +0 -0
  155. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +0 -0
  156. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zattrs +0 -0
  157. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/tables/.zattrs +0 -0
  158. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/tables/.zgroup +0 -0
  159. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zattrs +0 -0
  160. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zgroup +0 -0
  161. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +0 -0
  162. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/.zattrs +0 -0
  163. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/.zgroup +0 -0
  164. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +0 -0
  165. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/0/.zattrs +0 -0
  166. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +0 -0
  167. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/1/.zattrs +0 -0
  168. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +0 -0
  169. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +0 -0
  170. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +0 -0
  171. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +0 -0
  172. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +0 -0
  173. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zattrs +0 -0
  174. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +0 -0
  175. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zattrs +0 -0
  176. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/tables/.zattrs +0 -0
  177. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/tables/.zgroup +0 -0
  178. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  179. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  180. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +0 -0
  181. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/.zattrs +0 -0
  182. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/.zgroup +0 -0
  183. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +0 -0
  184. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/0/.zattrs +0 -0
  185. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +0 -0
  186. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/1/.zattrs +0 -0
  187. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +0 -0
  188. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +0 -0
  189. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +0 -0
  190. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +0 -0
  191. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +0 -0
  192. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zattrs +0 -0
  193. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +0 -0
  194. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zattrs +0 -0
  195. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/tables/.zattrs +0 -0
  196. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/tables/.zgroup +0 -0
  197. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  198. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  199. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +0 -0
  200. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +0 -0
  201. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +0 -0
  202. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +0 -0
  203. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/0/.zattrs +0 -0
  204. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +0 -0
  205. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/1/.zattrs +0 -0
  206. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +0 -0
  207. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +0 -0
  208. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +0 -0
  209. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +0 -0
  210. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +0 -0
  211. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zattrs +0 -0
  212. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +0 -0
  213. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zattrs +0 -0
  214. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/tables/.zattrs +0 -0
  215. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/tables/.zgroup +0 -0
  216. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  217. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  218. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +0 -0
  219. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +0 -0
  220. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +0 -0
  221. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +0 -0
  222. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/0/.zattrs +0 -0
  223. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +0 -0
  224. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/1/.zattrs +0 -0
  225. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +0 -0
  226. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +0 -0
  227. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +0 -0
  228. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +0 -0
  229. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +0 -0
  230. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zattrs +0 -0
  231. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +0 -0
  232. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zattrs +0 -0
  233. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/tables/.zattrs +0 -0
  234. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/tables/.zgroup +0 -0
  235. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  236. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  237. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +0 -0
  238. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/.zattrs +0 -0
  239. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/.zgroup +0 -0
  240. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +0 -0
  241. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/0/.zattrs +0 -0
  242. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +0 -0
  243. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/1/.zattrs +0 -0
  244. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +0 -0
  245. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +0 -0
  246. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +0 -0
  247. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +0 -0
  248. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +0 -0
  249. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zattrs +0 -0
  250. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +0 -0
  251. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zattrs +0 -0
  252. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/tables/.zattrs +0 -0
  253. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/tables/.zgroup +0 -0
  254. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  255. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  256. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +0 -0
  257. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +0 -0
  258. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +0 -0
  259. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +0 -0
  260. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/0/.zattrs +0 -0
  261. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +0 -0
  262. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/1/.zattrs +0 -0
  263. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +0 -0
  264. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +0 -0
  265. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +0 -0
  266. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +0 -0
  267. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +0 -0
  268. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zattrs +0 -0
  269. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +0 -0
  270. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zattrs +0 -0
  271. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/tables/.zattrs +0 -0
  272. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/tables/.zgroup +0 -0
  273. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  274. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  275. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +0 -0
  276. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/.zattrs +0 -0
  277. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/.zgroup +0 -0
  278. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/0/.zarray +0 -0
  279. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/0/.zattrs +0 -0
  280. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/1/.zarray +0 -0
  281. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/1/.zattrs +0 -0
  282. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +0 -0
  283. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +0 -0
  284. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +0 -0
  285. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +0 -0
  286. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +0 -0
  287. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zattrs +0 -0
  288. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +0 -0
  289. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zattrs +0 -0
  290. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/tables/.zattrs +0 -0
  291. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/tables/.zgroup +0 -0
  292. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zattrs +0 -0
  293. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zgroup +0 -0
  294. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +0 -0
  295. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/.zattrs +0 -0
  296. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/.zgroup +0 -0
  297. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +0 -0
  298. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/0/.zattrs +0 -0
  299. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +0 -0
  300. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/1/.zattrs +0 -0
  301. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +0 -0
  302. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +0 -0
  303. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +0 -0
  304. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +0 -0
  305. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +0 -0
  306. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zattrs +0 -0
  307. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +0 -0
  308. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zattrs +0 -0
  309. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/tables/.zattrs +0 -0
  310. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/tables/.zgroup +0 -0
  311. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zattrs +0 -0
  312. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zgroup +0 -0
  313. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +0 -0
  314. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_image_meta.json +0 -0
  315. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_image_meta_wrong_axis_order.json +0 -0
  316. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_label_meta.json +0 -0
  317. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_well_meta.json +0 -0
  318. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v04/meta/ome_zarr_well_path_normalization_meta.json +0 -0
  319. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/0/zarr.json +0 -0
  320. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/1/zarr.json +0 -0
  321. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/0/zarr.json +0 -0
  322. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/1/zarr.json +0 -0
  323. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/zarr.json +0 -0
  324. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/labels/zarr.json +0 -0
  325. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +0 -0
  326. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/zarr.json +0 -0
  327. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/tables/zarr.json +0 -0
  328. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_c1yx.zarr/zarr.json +0 -0
  329. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/0/zarr.json +0 -0
  330. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/1/zarr.json +0 -0
  331. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/labels/label/0/zarr.json +0 -0
  332. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/labels/label/1/zarr.json +0 -0
  333. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/labels/label/zarr.json +0 -0
  334. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/labels/zarr.json +0 -0
  335. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +0 -0
  336. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  337. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/tables/zarr.json +0 -0
  338. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_cyx.zarr/zarr.json +0 -0
  339. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/0/zarr.json +0 -0
  340. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/1/zarr.json +0 -0
  341. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/labels/label/0/zarr.json +0 -0
  342. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/labels/label/1/zarr.json +0 -0
  343. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/labels/label/zarr.json +0 -0
  344. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/labels/zarr.json +0 -0
  345. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +0 -0
  346. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  347. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/tables/zarr.json +0 -0
  348. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_czyx.zarr/zarr.json +0 -0
  349. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/0/zarr.json +0 -0
  350. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/1/zarr.json +0 -0
  351. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/0/zarr.json +0 -0
  352. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/1/zarr.json +0 -0
  353. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/zarr.json +0 -0
  354. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/labels/zarr.json +0 -0
  355. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +0 -0
  356. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  357. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/tables/zarr.json +0 -0
  358. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tcyx.zarr/zarr.json +0 -0
  359. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/0/zarr.json +0 -0
  360. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/1/zarr.json +0 -0
  361. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/0/zarr.json +0 -0
  362. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/1/zarr.json +0 -0
  363. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/zarr.json +0 -0
  364. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/labels/zarr.json +0 -0
  365. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +0 -0
  366. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  367. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/tables/zarr.json +0 -0
  368. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tczyx.zarr/zarr.json +0 -0
  369. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/0/zarr.json +0 -0
  370. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/1/zarr.json +0 -0
  371. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/labels/label/0/zarr.json +0 -0
  372. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/labels/label/1/zarr.json +0 -0
  373. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/labels/label/zarr.json +0 -0
  374. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/labels/zarr.json +0 -0
  375. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +0 -0
  376. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  377. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/tables/zarr.json +0 -0
  378. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tyx.zarr/zarr.json +0 -0
  379. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/0/zarr.json +0 -0
  380. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/1/zarr.json +0 -0
  381. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/0/zarr.json +0 -0
  382. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/1/zarr.json +0 -0
  383. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/zarr.json +0 -0
  384. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/labels/zarr.json +0 -0
  385. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +0 -0
  386. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  387. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/tables/zarr.json +0 -0
  388. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_tzyx.zarr/zarr.json +0 -0
  389. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/0/zarr.json +0 -0
  390. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/1/zarr.json +0 -0
  391. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/labels/label/0/zarr.json +0 -0
  392. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/labels/label/1/zarr.json +0 -0
  393. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/labels/label/zarr.json +0 -0
  394. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/labels/zarr.json +0 -0
  395. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +0 -0
  396. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/zarr.json +0 -0
  397. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/tables/zarr.json +0 -0
  398. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_yx.zarr/zarr.json +0 -0
  399. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/0/zarr.json +0 -0
  400. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/1/zarr.json +0 -0
  401. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/labels/label/0/zarr.json +0 -0
  402. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/labels/label/1/zarr.json +0 -0
  403. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/labels/label/zarr.json +0 -0
  404. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/labels/zarr.json +0 -0
  405. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +0 -0
  406. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/zarr.json +0 -0
  407. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/tables/zarr.json +0 -0
  408. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/data/v05/images/test_image_zyx.zarr/zarr.json +0 -0
  409. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/conftest.py +0 -0
  410. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/test_http_store.py +0 -0
  411. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/test_local_store.py +0 -0
  412. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/test_memory_store.py +0 -0
  413. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/test_s3_store.py +0 -0
  414. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/stores/utils.py +0 -0
  415. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/common/test_dimensions.py +0 -0
  416. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/common/test_pyramid.py +0 -0
  417. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/common/test_roi.py +0 -0
  418. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/common/test_transforms.py +0 -0
  419. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/hcs/test_plate.py +0 -0
  420. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/hcs/test_well.py +0 -0
  421. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/images/test_images.py +0 -0
  422. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/images/test_masked_images.py +0 -0
  423. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/images/test_omezarr_container.py +0 -0
  424. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/images/test_table_ops.py +0 -0
  425. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/io_pipes/test_axes_ops.py +0 -0
  426. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/io_pipes/test_slicing_ops.py +0 -0
  427. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/iterators/test_iterators.py +0 -0
  428. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_image_handler.py +0 -0
  429. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_unit_ngio_specs.py +0 -0
  430. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_unit_v04_utils.py +0 -0
  431. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_backends.py +0 -0
  432. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_backends_utils.py +0 -0
  433. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_feature_table.py +0 -0
  434. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_generic_table.py +0 -0
  435. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_masking_roi_table_v1.py +0 -0
  436. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_roi_table_v1.py +0 -0
  437. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/tables/test_table_group.py +0 -0
  438. {ngio-0.5.0a3 → ngio-0.5.0b1}/tests/unit/utils/test_download_datasets.py +0 -0
  439. {ngio-0.5.0a3 → ngio-0.5.0b1}/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.5.0a3
3
+ Version: 0.5.0b1
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
@@ -681,7 +681,7 @@ def _check_chunks_and_shards_compatibility(
681
681
 
682
682
  def _apply_channel_policy(
683
683
  ref_image: AbstractImage,
684
- channels_policy: Literal["squeeze", "same"] | int,
684
+ channels_policy: Literal["squeeze", "same", "singleton"] | int,
685
685
  shapes: list[tuple[int, ...]],
686
686
  axes: tuple[str, ...],
687
687
  chunks: ChunksLike,
@@ -703,6 +703,10 @@ def _apply_channel_policy(
703
703
  if channels_policy == "same":
704
704
  return shapes, axes, chunks, shards
705
705
 
706
+ if channels_policy == "singleton":
707
+ # Treat 'singleton' as setting channel size to 1
708
+ channels_policy = 1
709
+
706
710
  channel_index = ref_image.axes_handler.get_index("c")
707
711
  if channel_index is None:
708
712
  if channels_policy == "squeeze":
@@ -729,11 +733,6 @@ def _apply_channel_policy(
729
733
  elif isinstance(channels_policy, int):
730
734
  new_shapes = []
731
735
  for shape in shapes:
732
- if shape[channel_index] != channels_policy:
733
- raise NgioValueError(
734
- f"Cannot apply channel policy {channels_policy=} to an image "
735
- f"with {shape[channel_index]} channels."
736
- )
737
736
  new_shape = (
738
737
  *shape[:channel_index],
739
738
  channels_policy,
@@ -797,7 +796,7 @@ def abstract_derive(
797
796
  z_spacing: float | None = None,
798
797
  time_spacing: float | None = None,
799
798
  name: str | None = None,
800
- channels_policy: Literal["squeeze", "same"] | int = "same",
799
+ channels_policy: Literal["squeeze", "same", "singleton"] | int = "same",
801
800
  channels_meta: Sequence[str | Channel] | None = None,
802
801
  ngff_version: NgffVersions | None = None,
803
802
  # Zarr Array parameters
@@ -826,9 +825,11 @@ def abstract_derive(
826
825
  time_spacing (float | None): The time spacing of the new image.
827
826
  axes_names (Sequence[str] | None): The axes names of the new image.
828
827
  name (str | None): The name of the new image.
829
- channels_policy (Literal["squeeze", "same"] | int): Possible policies:
828
+ channels_policy (Literal["squeeze", "same", "singleton"] | int):
829
+ Possible policies:
830
830
  - If "squeeze", the channels axis will be removed (no matter its size).
831
831
  - If "same", the channels axis will be kept as is (if it exists).
832
+ - If "singleton", the channels axis will be set to size 1.
832
833
  - If an integer is provided, the channels axis will be changed to have that
833
834
  size.
834
835
  channels_meta (Sequence[str | Channel] | None): The channels metadata
@@ -765,6 +765,7 @@ def derive_image_container(
765
765
  z_spacing: float | None = None,
766
766
  time_spacing: float | None = None,
767
767
  name: str | None = None,
768
+ channels_policy: Literal["same", "squeeze", "singleton"] | int = "same",
768
769
  channels_meta: Sequence[str | Channel] | None = None,
769
770
  ngff_version: NgffVersions | None = None,
770
771
  # Zarr Array parameters
@@ -793,6 +794,13 @@ def derive_image_container(
793
794
  z_spacing (float | None): The z spacing of the new image.
794
795
  time_spacing (float | None): The time spacing of the new image.
795
796
  name (str | None): The name of the new image.
797
+ channels_policy (Literal["squeeze", "same", "singleton"] | int): Possible
798
+ policies:
799
+ - If "squeeze", the channels axis will be removed (no matter its size).
800
+ - If "same", the channels axis will be kept as is (if it exists).
801
+ - If "singleton", the channels axis will be set to size 1.
802
+ - If an integer is provided, the channels axis will be changed to have
803
+ that size.
796
804
  channels_meta (Sequence[str | Channel] | None): The channels metadata
797
805
  of the new image.
798
806
  ngff_version (NgffVersions | None): The NGFF version to use.
@@ -826,7 +834,7 @@ def derive_image_container(
826
834
  time_spacing=time_spacing,
827
835
  name=name,
828
836
  channels_meta=channels_meta,
829
- channels_policy="same",
837
+ channels_policy=channels_policy,
830
838
  ngff_version=ngff_version,
831
839
  chunks=chunks,
832
840
  shards=shards,
@@ -11,8 +11,11 @@ from ngio.images._abstract_image import AbstractImage, abstract_derive
11
11
  from ngio.images._image import Image
12
12
  from ngio.ome_zarr_meta import (
13
13
  LabelMetaHandler,
14
+ LabelsGroupMetaHandler,
14
15
  NgioLabelMeta,
16
+ NgioLabelsGroupMeta,
15
17
  PixelSize,
18
+ update_ngio_labels_group_meta,
16
19
  )
17
20
  from ngio.ome_zarr_meta.ngio_specs import (
18
21
  DefaultSpaceUnit,
@@ -112,29 +115,39 @@ class Label(AbstractImage):
112
115
  class LabelsContainer:
113
116
  """A class to handle the /labels group in an OME-NGFF file."""
114
117
 
115
- def __init__(self, group_handler: ZarrGroupHandler) -> None:
118
+ def __init__(
119
+ self,
120
+ group_handler: ZarrGroupHandler,
121
+ ngff_version: NgffVersions | None = None,
122
+ ) -> None:
116
123
  """Initialize the LabelGroupHandler."""
117
124
  self._group_handler = group_handler
118
- # Validate the group
119
- # Either contains a labels attribute or is empty
120
- attrs = self._group_handler.load_attrs()
121
- if len(attrs) == 0:
122
- # It's an empty group
123
- pass
124
- elif "labels" in attrs and isinstance(attrs["labels"], list):
125
- # It's a valid group
126
- pass
127
- else:
128
- raise NgioValidationError(
129
- f"Invalid /labels group. "
130
- f"Expected a single labels attribute with a list of label names. "
131
- f"Found: {attrs}"
125
+ # If the group is empty, initialize the metadata
126
+ try:
127
+ self._meta_handler = LabelsGroupMetaHandler(group_handler)
128
+ except NgioValidationError:
129
+ if ngff_version is None:
130
+ raise NgioValueError(
131
+ "The /labels group is missing metadata. "
132
+ "Please provide the ngff_version to initialize it."
133
+ ) from None
134
+ meta = NgioLabelsGroupMeta(labels=[], version=ngff_version)
135
+ update_ngio_labels_group_meta(
136
+ group_handler=group_handler,
137
+ ngio_meta=meta,
132
138
  )
139
+ self._group_handler = self._group_handler.reopen_handler()
140
+ self._meta_handler = LabelsGroupMetaHandler(group_handler)
141
+
142
+ @property
143
+ def meta(self) -> NgioLabelsGroupMeta:
144
+ """Return the metadata."""
145
+ meta = self._meta_handler.get_meta()
146
+ return meta
133
147
 
134
148
  def list(self) -> list[str]:
135
149
  """Create the /labels group if it doesn't exist."""
136
- attrs = self._group_handler.load_attrs()
137
- return attrs.get("labels", [])
150
+ return self.meta.labels
138
151
 
139
152
  def get(
140
153
  self,
@@ -178,7 +191,7 @@ class LabelsContainer:
178
191
  pixelsize: float | tuple[float, float] | None = None,
179
192
  z_spacing: float | None = None,
180
193
  time_spacing: float | None = None,
181
- channels_policy: Literal["same", "squeeze"] | int = "squeeze",
194
+ channels_policy: Literal["same", "squeeze", "singleton"] | int = "squeeze",
182
195
  ngff_version: NgffVersions | None = None,
183
196
  # Zarr Array parameters
184
197
  chunks: ChunksLike = "auto",
@@ -210,9 +223,11 @@ class LabelsContainer:
210
223
  name (str | None): The name of the new image.
211
224
  channels_meta (Sequence[str | Channel] | None): The channels metadata
212
225
  of the new image.
213
- channels_policy (Literal["squeeze", "same"] | int): Possible policies:
226
+ channels_policy (Literal["squeeze", "same", "singleton"] | int):
227
+ Possible policies:
214
228
  - If "squeeze", the channels axis will be removed (no matter its size).
215
229
  - If "same", the channels axis will be kept as is (if it exists).
230
+ - If "singleton", the channels axis will be set to size 1.
216
231
  - If an integer is provided, the channels axis will be changed to have
217
232
  that size.
218
233
  ngff_version (NgffVersions | None): The NGFF version to use.
@@ -267,8 +282,11 @@ class LabelsContainer:
267
282
 
268
283
  if name not in existing_labels:
269
284
  existing_labels.append(name)
270
- self._group_handler.write_attrs({"labels": existing_labels})
271
285
 
286
+ update_meta = NgioLabelsGroupMeta(
287
+ labels=existing_labels, version=self.meta.version
288
+ )
289
+ self._meta_handler.update_meta(update_meta)
272
290
  return self.get(name)
273
291
 
274
292
 
@@ -282,7 +300,7 @@ def derive_label(
282
300
  z_spacing: float | None = None,
283
301
  time_spacing: float | None = None,
284
302
  name: str | None = None,
285
- channels_policy: Literal["same", "squeeze"] | int = "squeeze",
303
+ channels_policy: Literal["same", "squeeze", "singleton"] | int = "squeeze",
286
304
  ngff_version: NgffVersions | None = None,
287
305
  # Zarr Array parameters
288
306
  chunks: ChunksLike = "auto",
@@ -308,9 +326,11 @@ def derive_label(
308
326
  z_spacing (float | None): The z spacing of the new label.
309
327
  time_spacing (float | None): The time spacing of the new label.
310
328
  name (str | None): The name of the new label.
311
- channels_policy (Literal["squeeze", "same"] | int): Possible policies:
329
+ channels_policy (Literal["squeeze", "same", "singleton"] | int): Possible
330
+ policies:
312
331
  - If "squeeze", the channels axis will be removed (no matter its size).
313
332
  - If "same", the channels axis will be kept as is (if it exists).
333
+ - If "singleton", the channels axis will be set to size 1.
314
334
  - If an integer is provided, the channels axis will be changed to have that
315
335
  size.
316
336
  ngff_version (NgffVersions | None): The NGFF version to use.
@@ -61,13 +61,13 @@ def _try_get_table_container(
61
61
 
62
62
 
63
63
  def _try_get_label_container(
64
- handler: ZarrGroupHandler, create_mode: bool = True
64
+ handler: ZarrGroupHandler, ngff_version: NgffVersions, create_mode: bool = True
65
65
  ) -> LabelsContainer | None:
66
66
  """Return a default label container."""
67
67
  try:
68
68
  label_handler = handler.get_handler("labels", create_mode=create_mode)
69
- return LabelsContainer(label_handler)
70
- except NgioError:
69
+ return LabelsContainer(label_handler, ngff_version=ngff_version)
70
+ except FileNotFoundError:
71
71
  return None
72
72
 
73
73
 
@@ -149,7 +149,9 @@ class OmeZarrContainer:
149
149
  return self._labels_container
150
150
 
151
151
  _labels_container = _try_get_label_container(
152
- self._group_handler, create_mode=create_mode
152
+ self._group_handler,
153
+ create_mode=create_mode,
154
+ ngff_version=self.image_meta.version,
153
155
  )
154
156
  self._labels_container = _labels_container
155
157
  return self._labels_container
@@ -428,6 +430,7 @@ class OmeZarrContainer:
428
430
  z_spacing: float | None = None,
429
431
  time_spacing: float | None = None,
430
432
  name: str | None = None,
433
+ channels_policy: Literal["squeeze", "same", "singleton"] | int = "same",
431
434
  channels_meta: Sequence[str | Channel] | None = None,
432
435
  ngff_version: NgffVersions | None = None,
433
436
  # Zarr Array parameters
@@ -459,6 +462,12 @@ class OmeZarrContainer:
459
462
  z_spacing (float | None): The z spacing of the new image.
460
463
  time_spacing (float | None): The time spacing of the new image.
461
464
  name (str | None): The name of the new image.
465
+ channels_policy (Literal["squeeze", "same"] | int): Possible policies:
466
+ - If "squeeze", the channels axis will be removed (no matter its size).
467
+ - If "same", the channels axis will be kept as is (if it exists).
468
+ - If "singleton", the channels axis will be set to size 1.
469
+ - If an integer is provided, the channels axis will be changed to have
470
+ that size.
462
471
  channels_meta (Sequence[str | Channel] | None): The channels metadata
463
472
  of the new image.
464
473
  ngff_version (NgffVersions | None): The NGFF version to use.
@@ -739,7 +748,7 @@ class OmeZarrContainer:
739
748
  pixelsize: float | tuple[float, float] | None = None,
740
749
  z_spacing: float | None = None,
741
750
  time_spacing: float | None = None,
742
- channels_policy: Literal["same", "squeeze"] | int = "squeeze",
751
+ channels_policy: Literal["same", "squeeze", "singleton"] | int = "squeeze",
743
752
  ngff_version: NgffVersions | None = None,
744
753
  # Zarr Array parameters
745
754
  chunks: ChunksLike = "auto",
@@ -769,6 +778,7 @@ class OmeZarrContainer:
769
778
  channels_policy (Literal["same", "squeeze"] | int): Possible policies:
770
779
  - If "squeeze", the channels axis will be removed (no matter its size).
771
780
  - If "same", the channels axis will be kept as is (if it exists).
781
+ - If "singleton", the channels axis will be set to size 1.
772
782
  - If an integer is provided, the channels axis will be changed to have
773
783
  that size.
774
784
  Defaults to "squeeze".
@@ -3,10 +3,12 @@
3
3
  from ngio.ome_zarr_meta._meta_handlers import (
4
4
  ImageMetaHandler,
5
5
  LabelMetaHandler,
6
+ LabelsGroupMetaHandler,
6
7
  PlateMetaHandler,
7
8
  WellMetaHandler,
8
9
  update_ngio_image_meta,
9
10
  update_ngio_label_meta,
11
+ update_ngio_labels_group_meta,
10
12
  update_ngio_meta,
11
13
  update_ngio_plate_meta,
12
14
  update_ngio_well_meta,
@@ -18,6 +20,7 @@ from ngio.ome_zarr_meta.ngio_specs import (
18
20
  NgffVersions,
19
21
  NgioImageMeta,
20
22
  NgioLabelMeta,
23
+ NgioLabelsGroupMeta,
21
24
  NgioPlateMeta,
22
25
  NgioWellMeta,
23
26
  PixelSize,
@@ -31,10 +34,12 @@ __all__ = [
31
34
  "ImageInWellPath",
32
35
  "ImageMetaHandler",
33
36
  "LabelMetaHandler",
37
+ "LabelsGroupMetaHandler",
34
38
  "NgffVersions",
35
39
  "NgffVersions",
36
40
  "NgioImageMeta",
37
41
  "NgioLabelMeta",
42
+ "NgioLabelsGroupMeta",
38
43
  "NgioPlateMeta",
39
44
  "NgioWellMeta",
40
45
  "PixelSize",
@@ -45,6 +50,7 @@ __all__ = [
45
50
  "path_in_well_validation",
46
51
  "update_ngio_image_meta",
47
52
  "update_ngio_label_meta",
53
+ "update_ngio_labels_group_meta",
48
54
  "update_ngio_meta",
49
55
  "update_ngio_plate_meta",
50
56
  "update_ngio_well_meta",
@@ -7,26 +7,32 @@ from ngio.ome_zarr_meta.ngio_specs import (
7
7
  AxesSetup,
8
8
  NgioImageMeta,
9
9
  NgioLabelMeta,
10
+ NgioLabelsGroupMeta,
10
11
  NgioPlateMeta,
11
12
  NgioWellMeta,
12
13
  )
14
+ from ngio.ome_zarr_meta.ngio_specs._ngio_image import NgffVersions
13
15
  from ngio.ome_zarr_meta.v04 import (
14
16
  ngio_to_v04_image_meta,
15
17
  ngio_to_v04_label_meta,
18
+ ngio_to_v04_labels_group_meta,
16
19
  ngio_to_v04_plate_meta,
17
20
  ngio_to_v04_well_meta,
18
21
  v04_to_ngio_image_meta,
19
22
  v04_to_ngio_label_meta,
23
+ v04_to_ngio_labels_group_meta,
20
24
  v04_to_ngio_plate_meta,
21
25
  v04_to_ngio_well_meta,
22
26
  )
23
27
  from ngio.ome_zarr_meta.v05 import (
24
28
  ngio_to_v05_image_meta,
25
29
  ngio_to_v05_label_meta,
30
+ ngio_to_v05_labels_group_meta,
26
31
  ngio_to_v05_plate_meta,
27
32
  ngio_to_v05_well_meta,
28
33
  v05_to_ngio_image_meta,
29
34
  v05_to_ngio_label_meta,
35
+ v05_to_ngio_labels_group_meta,
30
36
  v05_to_ngio_plate_meta,
31
37
  v05_to_ngio_well_meta,
32
38
  )
@@ -45,9 +51,22 @@ _plate_encoder_registry = {"0.4": ngio_to_v04_plate_meta, "0.5": ngio_to_v05_pla
45
51
  _plate_decoder_registry = {"0.4": v04_to_ngio_plate_meta, "0.5": v05_to_ngio_plate_meta}
46
52
  _well_encoder_registry = {"0.4": ngio_to_v04_well_meta, "0.5": ngio_to_v05_well_meta}
47
53
  _well_decoder_registry = {"0.4": v04_to_ngio_well_meta, "0.5": v05_to_ngio_well_meta}
54
+ _labels_group_encoder_registry = {
55
+ "0.4": ngio_to_v04_labels_group_meta,
56
+ "0.5": ngio_to_v05_labels_group_meta,
57
+ }
58
+ _labels_group_decoder_registry = {
59
+ "0.4": v04_to_ngio_labels_group_meta,
60
+ "0.5": v05_to_ngio_labels_group_meta,
61
+ }
48
62
 
49
63
  _meta_type = TypeVar(
50
- "_meta_type", NgioImageMeta, NgioLabelMeta, NgioPlateMeta, NgioWellMeta
64
+ "_meta_type",
65
+ NgioImageMeta,
66
+ NgioLabelMeta,
67
+ NgioLabelsGroupMeta,
68
+ NgioPlateMeta,
69
+ NgioWellMeta,
51
70
  )
52
71
 
53
72
 
@@ -62,6 +81,8 @@ def _find_encoder_registry(
62
81
  return _plate_encoder_registry
63
82
  elif isinstance(ngio_meta, NgioWellMeta):
64
83
  return _well_encoder_registry
84
+ elif isinstance(ngio_meta, NgioLabelsGroupMeta):
85
+ return _labels_group_encoder_registry
65
86
  else:
66
87
  raise NgioValueError(f"Unsupported NGIO metadata type: {type(ngio_meta)}")
67
88
 
@@ -97,6 +118,8 @@ def _find_decoder_registry(
97
118
  return _plate_decoder_registry
98
119
  elif meta_type is NgioWellMeta:
99
120
  return _well_decoder_registry
121
+ elif meta_type is NgioLabelsGroupMeta:
122
+ return _labels_group_decoder_registry
100
123
  else:
101
124
  raise NgioValueError(f"Unsupported NGIO metadata type: {meta_type}")
102
125
 
@@ -447,3 +470,67 @@ class WellMetaHandler:
447
470
  group_handler=self._group_handler,
448
471
  ngio_meta=ngio_meta,
449
472
  )
473
+
474
+
475
+ def get_ngio_labels_group_meta(
476
+ group_handler: ZarrGroupHandler,
477
+ version: str | None = None,
478
+ ) -> NgioLabelsGroupMeta:
479
+ """Retrieve the NGIO labels group metadata from the Zarr group.
480
+
481
+ Args:
482
+ group_handler (ZarrGroupHandler): The Zarr group handler.
483
+ version (str | None): Optional NGFF version to use for decoding.
484
+
485
+ Returns:
486
+ NgioLabelsGroupMeta: The NGIO labels group metadata.
487
+ """
488
+ return get_ngio_meta(
489
+ group_handler=group_handler,
490
+ meta_type=NgioLabelsGroupMeta,
491
+ version=version,
492
+ )
493
+
494
+
495
+ def update_ngio_labels_group_meta(
496
+ group_handler: ZarrGroupHandler,
497
+ ngio_meta: NgioLabelsGroupMeta,
498
+ ) -> None:
499
+ """Update the NGIO labels group metadata in the Zarr group.
500
+
501
+ Args:
502
+ group_handler (ZarrGroupHandler): The Zarr group handler.
503
+ ngio_meta (NgioLabelsGroupMeta): The new NGIO labels group metadata.
504
+
505
+ """
506
+ update_ngio_meta(
507
+ group_handler=group_handler,
508
+ ngio_meta=ngio_meta,
509
+ )
510
+
511
+
512
+ class LabelsGroupMetaHandler:
513
+ def __init__(
514
+ self,
515
+ group_handler: ZarrGroupHandler,
516
+ version: NgffVersions | None = None,
517
+ ):
518
+ self._group_handler = group_handler
519
+ self._version = version
520
+
521
+ meta = self.get_meta()
522
+ self._version = meta.version
523
+
524
+ def get_meta(self) -> NgioLabelsGroupMeta:
525
+ """Retrieve the NGIO labels group metadata."""
526
+ return get_ngio_labels_group_meta(
527
+ group_handler=self._group_handler,
528
+ version=self._version,
529
+ )
530
+
531
+ def update_meta(self, ngio_meta: NgioLabelsGroupMeta) -> None:
532
+ """Update the NGIO labels group metadata."""
533
+ update_ngio_labels_group_meta(
534
+ group_handler=self._group_handler,
535
+ ngio_meta=ngio_meta,
536
+ )
@@ -40,6 +40,7 @@ from ngio.ome_zarr_meta.ngio_specs._ngio_image import (
40
40
  NgioImageLabelMeta,
41
41
  NgioImageMeta,
42
42
  NgioLabelMeta,
43
+ NgioLabelsGroupMeta,
43
44
  )
44
45
  from ngio.ome_zarr_meta.ngio_specs._pixel_size import PixelSize
45
46
 
@@ -62,6 +63,7 @@ __all__ = [
62
63
  "NgioImageLabelMeta",
63
64
  "NgioImageMeta",
64
65
  "NgioLabelMeta",
66
+ "NgioLabelsGroupMeta",
65
67
  "NgioPlateMeta",
66
68
  "NgioWellMeta",
67
69
  "PixelSize",
@@ -41,6 +41,13 @@ class ImageLabelSource(BaseModel):
41
41
  return cls(version=version, source={"image": "../../"})
42
42
 
43
43
 
44
+ class NgioLabelsGroupMeta(BaseModel):
45
+ """Metadata model for the /labels group in OME-NGFF."""
46
+
47
+ version: NgffVersions
48
+ labels: list[str]
49
+
50
+
44
51
  class AbstractNgioImageMeta:
45
52
  """Base class for ImageMeta and LabelMeta."""
46
53
 
@@ -3,10 +3,12 @@
3
3
  from ngio.ome_zarr_meta.v04._v04_spec import (
4
4
  ngio_to_v04_image_meta,
5
5
  ngio_to_v04_label_meta,
6
+ ngio_to_v04_labels_group_meta,
6
7
  ngio_to_v04_plate_meta,
7
8
  ngio_to_v04_well_meta,
8
9
  v04_to_ngio_image_meta,
9
10
  v04_to_ngio_label_meta,
11
+ v04_to_ngio_labels_group_meta,
10
12
  v04_to_ngio_plate_meta,
11
13
  v04_to_ngio_well_meta,
12
14
  )
@@ -14,10 +16,12 @@ from ngio.ome_zarr_meta.v04._v04_spec import (
14
16
  __all__ = [
15
17
  "ngio_to_v04_image_meta",
16
18
  "ngio_to_v04_label_meta",
19
+ "ngio_to_v04_labels_group_meta",
17
20
  "ngio_to_v04_plate_meta",
18
21
  "ngio_to_v04_well_meta",
19
22
  "v04_to_ngio_image_meta",
20
23
  "v04_to_ngio_label_meta",
24
+ "v04_to_ngio_labels_group_meta",
21
25
  "v04_to_ngio_plate_meta",
22
26
  "v04_to_ngio_well_meta",
23
27
  ]
@@ -16,7 +16,8 @@ from ome_zarr_models.v04.coordinate_transformations import (
16
16
  )
17
17
  from ome_zarr_models.v04.hcs import HCSAttrs as HCSAttrsV04
18
18
  from ome_zarr_models.v04.image import ImageAttrs as ImageAttrsV04
19
- from ome_zarr_models.v04.image_label import ImageLabelAttrs as LabelAttrsV04
19
+ from ome_zarr_models.v04.image_label import ImageLabelAttrs as ImageLabelAttrsV04
20
+ from ome_zarr_models.v04.labels import LabelsAttrs as LabelsAttrsV04
20
21
  from ome_zarr_models.v04.multiscales import Dataset as DatasetV04
21
22
  from ome_zarr_models.v04.multiscales import Multiscale as MultiscaleV04
22
23
  from ome_zarr_models.v04.multiscales import ValidTransform as ValidTransformV04
@@ -36,6 +37,7 @@ from ngio.ome_zarr_meta.ngio_specs import (
36
37
  ImageLabelSource,
37
38
  NgioImageMeta,
38
39
  NgioLabelMeta,
40
+ NgioLabelsGroupMeta,
39
41
  NgioPlateMeta,
40
42
  NgioWellMeta,
41
43
  default_channel_name,
@@ -231,7 +233,7 @@ def v04_to_ngio_label_meta(
231
233
  Returns:
232
234
  NgioImageMeta: The ngio image metadata.
233
235
  """
234
- v04_label = LabelAttrsV04(**metadata)
236
+ v04_label = ImageLabelAttrsV04(**metadata)
235
237
 
236
238
  if len(v04_label.multiscales) > 1:
237
239
  raise NotImplementedError(
@@ -381,10 +383,26 @@ def ngio_to_v04_label_meta(metadata: NgioLabelMeta) -> dict:
381
383
  "multiscales": [v04_muliscale],
382
384
  "image-label": metadata.image_label.model_dump(),
383
385
  }
384
- v04_label = LabelAttrsV04(**labels_meta)
386
+ v04_label = ImageLabelAttrsV04(**labels_meta)
385
387
  return v04_label.model_dump(exclude_none=True, by_alias=True)
386
388
 
387
389
 
390
+ def v04_to_ngio_labels_group_meta(
391
+ metadata: dict,
392
+ ) -> NgioLabelsGroupMeta:
393
+ """Convert a v04 label group metadata to a ngio label group metadata.
394
+
395
+ Args:
396
+ metadata (dict): The v04 label group metadata.
397
+
398
+ Returns:
399
+ NgioLabelGroupMeta: The ngio label group metadata.
400
+ """
401
+ v04_label_group = LabelsAttrsV04(**metadata).model_dump()
402
+ labels = v04_label_group.get("labels", [])
403
+ return NgioLabelsGroupMeta(labels=labels, version="0.4")
404
+
405
+
388
406
  def v04_to_ngio_well_meta(
389
407
  metadata: dict,
390
408
  ) -> NgioWellMeta:
@@ -440,3 +458,16 @@ def ngio_to_v04_plate_meta(metadata: NgioPlateMeta) -> dict:
440
458
  """
441
459
  v04_plate = HCSAttrsV04(**metadata.model_dump())
442
460
  return v04_plate.model_dump(exclude_none=True, by_alias=True)
461
+
462
+
463
+ def ngio_to_v04_labels_group_meta(metadata: NgioLabelsGroupMeta) -> dict:
464
+ """Convert a ngio label group metadata to a v04 label group metadata.
465
+
466
+ Args:
467
+ metadata (NgioLabelsGroupMeta): The ngio label group metadata.
468
+
469
+ Returns:
470
+ dict: The v04 label group metadata.
471
+ """
472
+ v04_label_group = LabelsAttrsV04(labels=metadata.labels)
473
+ return v04_label_group.model_dump(exclude_none=True, by_alias=True)
@@ -3,10 +3,12 @@
3
3
  from ngio.ome_zarr_meta.v05._v05_spec import (
4
4
  ngio_to_v05_image_meta,
5
5
  ngio_to_v05_label_meta,
6
+ ngio_to_v05_labels_group_meta,
6
7
  ngio_to_v05_plate_meta,
7
8
  ngio_to_v05_well_meta,
8
9
  v05_to_ngio_image_meta,
9
10
  v05_to_ngio_label_meta,
11
+ v05_to_ngio_labels_group_meta,
10
12
  v05_to_ngio_plate_meta,
11
13
  v05_to_ngio_well_meta,
12
14
  )
@@ -14,10 +16,12 @@ from ngio.ome_zarr_meta.v05._v05_spec import (
14
16
  __all__ = [
15
17
  "ngio_to_v05_image_meta",
16
18
  "ngio_to_v05_label_meta",
19
+ "ngio_to_v05_labels_group_meta",
17
20
  "ngio_to_v05_plate_meta",
18
21
  "ngio_to_v05_well_meta",
19
22
  "v05_to_ngio_image_meta",
20
23
  "v05_to_ngio_label_meta",
24
+ "v05_to_ngio_labels_group_meta",
21
25
  "v05_to_ngio_plate_meta",
22
26
  "v05_to_ngio_well_meta",
23
27
  ]