ngio 0.5.0a2__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 (539) hide show
  1. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/workflows/ci.yml +3 -2
  2. {ngio-0.5.0a2 → ngio-0.5.0b1}/CHANGELOG.md +5 -1
  3. {ngio-0.5.0a2 → ngio-0.5.0b1}/PKG-INFO +6 -2
  4. {ngio-0.5.0a2 → ngio-0.5.0b1}/pyproject.toml +13 -2
  5. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/__init__.py +2 -2
  6. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/common/__init__.py +11 -6
  7. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/common/_masking_roi.py +12 -41
  8. ngio-0.5.0b1/src/ngio/common/_pyramid.py +413 -0
  9. ngio-0.5.0b1/src/ngio/common/_roi.py +315 -0
  10. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_feature.py +3 -3
  11. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_rois_utils.py +10 -11
  12. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/hcs/_plate.py +50 -43
  13. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_abstract_image.py +418 -35
  14. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_create_synt_container.py +35 -42
  15. ngio-0.5.0b1/src/ngio/images/_create_utils.py +423 -0
  16. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_image.py +162 -176
  17. ngio-0.5.0b1/src/ngio/images/_label.py +387 -0
  18. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_ome_zarr_container.py +372 -197
  19. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes.py +9 -9
  20. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_masked.py +7 -7
  21. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_roi.py +6 -6
  22. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_io_pipes_types.py +3 -3
  23. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_match_shape.py +5 -4
  24. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_slices_utils.py +8 -5
  25. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/__init__.py +21 -18
  26. ngio-0.5.0b1/src/ngio/ome_zarr_meta/_meta_handlers.py +536 -0
  27. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/__init__.py +2 -0
  28. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_axes.py +1 -0
  29. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_dataset.py +13 -22
  30. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +54 -61
  31. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +21 -68
  32. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v04/__init__.py +5 -1
  33. ngio-0.5.0a2/src/ngio/ome_zarr_meta/v04/_v04_spec_utils.py → ngio-0.5.0b1/src/ngio/ome_zarr_meta/v04/_v04_spec.py +49 -63
  34. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v05/__init__.py +5 -1
  35. ngio-0.5.0a2/src/ngio/ome_zarr_meta/v05/_v05_spec_utils.py → ngio-0.5.0b1/src/ngio/ome_zarr_meta/v05/_v05_spec.py +57 -64
  36. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/_tables_container.py +2 -4
  37. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_anndata.py +58 -8
  38. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_anndata_utils.py +1 -6
  39. ngio-0.5.0b1/src/ngio/tables/backends/_csv.py +19 -0
  40. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_json.py +10 -13
  41. ngio-0.5.0b1/src/ngio/tables/backends/_parquet.py +19 -0
  42. ngio-0.5.0b1/src/ngio/tables/backends/_py_arrow_backends.py +222 -0
  43. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/v1/_roi_table.py +41 -24
  44. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/__init__.py +4 -12
  45. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/_zarr_utils.py +163 -53
  46. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/conftest.py +12 -6
  47. ngio-0.5.0b1/tests/create_test_data.py +78 -0
  48. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +86 -0
  49. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +3 -0
  50. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +27 -0
  51. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/0/.zattrs +1 -0
  52. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +27 -0
  53. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/1/.zattrs +1 -0
  54. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +5 -0
  55. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +3 -0
  56. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +59 -0
  57. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +3 -0
  58. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +25 -0
  59. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zattrs +1 -0
  60. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +25 -0
  61. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zattrs +1 -0
  62. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/tables/.zattrs +5 -0
  63. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/tables/.zgroup +3 -0
  64. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zattrs +7 -0
  65. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zgroup +3 -0
  66. ngio-0.5.0b1/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +2 -0
  67. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/.zattrs +79 -0
  68. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/.zgroup +3 -0
  69. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +25 -0
  70. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/0/.zattrs +1 -0
  71. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +25 -0
  72. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/1/.zattrs +1 -0
  73. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +5 -0
  74. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +3 -0
  75. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +52 -0
  76. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +3 -0
  77. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +23 -0
  78. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zattrs +1 -0
  79. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +23 -0
  80. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zattrs +1 -0
  81. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/tables/.zattrs +5 -0
  82. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/tables/.zgroup +3 -0
  83. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  84. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  85. ngio-0.5.0b1/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +2 -0
  86. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/.zattrs +86 -0
  87. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/.zgroup +3 -0
  88. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +27 -0
  89. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/0/.zattrs +1 -0
  90. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +27 -0
  91. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/1/.zattrs +1 -0
  92. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +5 -0
  93. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +3 -0
  94. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +59 -0
  95. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +3 -0
  96. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +25 -0
  97. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zattrs +1 -0
  98. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +25 -0
  99. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zattrs +1 -0
  100. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/tables/.zattrs +5 -0
  101. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/tables/.zgroup +3 -0
  102. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  103. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  104. ngio-0.5.0b1/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +2 -0
  105. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +98 -0
  106. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +3 -0
  107. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +27 -0
  108. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/0/.zattrs +1 -0
  109. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +27 -0
  110. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/1/.zattrs +1 -0
  111. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +5 -0
  112. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +3 -0
  113. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +59 -0
  114. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +3 -0
  115. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +25 -0
  116. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zattrs +1 -0
  117. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +25 -0
  118. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zattrs +1 -0
  119. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/tables/.zattrs +5 -0
  120. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/tables/.zgroup +3 -0
  121. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  122. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  123. ngio-0.5.0b1/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +2 -0
  124. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +93 -0
  125. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +3 -0
  126. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +29 -0
  127. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/0/.zattrs +1 -0
  128. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +29 -0
  129. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/1/.zattrs +1 -0
  130. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +5 -0
  131. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +3 -0
  132. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +66 -0
  133. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +3 -0
  134. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +27 -0
  135. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zattrs +1 -0
  136. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +27 -0
  137. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zattrs +1 -0
  138. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/tables/.zattrs +5 -0
  139. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/tables/.zgroup +3 -0
  140. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  141. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  142. ngio-0.5.0b1/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +2 -0
  143. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/.zattrs +68 -0
  144. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/.zgroup +3 -0
  145. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +25 -0
  146. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/0/.zattrs +1 -0
  147. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +25 -0
  148. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/1/.zattrs +1 -0
  149. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +5 -0
  150. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +3 -0
  151. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +59 -0
  152. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +3 -0
  153. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +25 -0
  154. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zattrs +1 -0
  155. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +25 -0
  156. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zattrs +1 -0
  157. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/tables/.zattrs +5 -0
  158. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/tables/.zgroup +3 -0
  159. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  160. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  161. ngio-0.5.0b1/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +2 -0
  162. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +75 -0
  163. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +3 -0
  164. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +27 -0
  165. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/0/.zattrs +1 -0
  166. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +27 -0
  167. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/1/.zattrs +1 -0
  168. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +5 -0
  169. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +3 -0
  170. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +66 -0
  171. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +3 -0
  172. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +27 -0
  173. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zattrs +1 -0
  174. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +27 -0
  175. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zattrs +1 -0
  176. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/tables/.zattrs +5 -0
  177. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/tables/.zgroup +3 -0
  178. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  179. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  180. ngio-0.5.0b1/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +2 -0
  181. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/.zattrs +61 -0
  182. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/.zgroup +3 -0
  183. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/0/.zarray +23 -0
  184. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/0/.zattrs +1 -0
  185. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/1/.zarray +23 -0
  186. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/1/.zattrs +1 -0
  187. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +5 -0
  188. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +3 -0
  189. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +52 -0
  190. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +3 -0
  191. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +23 -0
  192. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zattrs +1 -0
  193. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +23 -0
  194. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zattrs +1 -0
  195. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/tables/.zattrs +5 -0
  196. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/tables/.zgroup +3 -0
  197. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zattrs +7 -0
  198. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zgroup +3 -0
  199. ngio-0.5.0b1/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +2 -0
  200. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/.zattrs +68 -0
  201. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/.zgroup +3 -0
  202. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +25 -0
  203. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/0/.zattrs +1 -0
  204. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +25 -0
  205. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/1/.zattrs +1 -0
  206. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +5 -0
  207. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +3 -0
  208. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +59 -0
  209. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +3 -0
  210. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +25 -0
  211. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zattrs +1 -0
  212. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +25 -0
  213. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zattrs +1 -0
  214. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/tables/.zattrs +5 -0
  215. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/tables/.zgroup +3 -0
  216. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zattrs +7 -0
  217. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zgroup +3 -0
  218. ngio-0.5.0b1/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +2 -0
  219. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/0/zarr.json +52 -0
  220. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/1/zarr.json +52 -0
  221. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/labels/label/0/zarr.json +44 -0
  222. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/labels/label/1/zarr.json +44 -0
  223. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/labels/label/zarr.json +65 -0
  224. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/labels/zarr.json +9 -0
  225. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +2 -0
  226. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/zarr.json +11 -0
  227. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/tables/zarr.json +9 -0
  228. ngio-0.5.0b1/tests/data/v05/images/test_image_c1yx.zarr/zarr.json +92 -0
  229. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/0/zarr.json +49 -0
  230. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/1/zarr.json +49 -0
  231. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/labels/label/0/zarr.json +42 -0
  232. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/labels/label/1/zarr.json +42 -0
  233. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/labels/label/zarr.json +58 -0
  234. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/labels/zarr.json +9 -0
  235. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +2 -0
  236. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  237. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/tables/zarr.json +9 -0
  238. ngio-0.5.0b1/tests/data/v05/images/test_image_cyx.zarr/zarr.json +85 -0
  239. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/0/zarr.json +52 -0
  240. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/1/zarr.json +52 -0
  241. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/labels/label/0/zarr.json +44 -0
  242. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/labels/label/1/zarr.json +44 -0
  243. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/labels/label/zarr.json +65 -0
  244. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/labels/zarr.json +9 -0
  245. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +2 -0
  246. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  247. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/tables/zarr.json +9 -0
  248. ngio-0.5.0b1/tests/data/v05/images/test_image_czyx.zarr/zarr.json +92 -0
  249. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/0/zarr.json +52 -0
  250. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/1/zarr.json +52 -0
  251. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/labels/label/0/zarr.json +44 -0
  252. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/labels/label/1/zarr.json +44 -0
  253. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/labels/label/zarr.json +65 -0
  254. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/labels/zarr.json +9 -0
  255. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +2 -0
  256. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  257. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/tables/zarr.json +9 -0
  258. ngio-0.5.0b1/tests/data/v05/images/test_image_tcyx.zarr/zarr.json +104 -0
  259. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/0/zarr.json +55 -0
  260. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/1/zarr.json +55 -0
  261. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/labels/label/0/zarr.json +46 -0
  262. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/labels/label/1/zarr.json +46 -0
  263. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/labels/label/zarr.json +72 -0
  264. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/labels/zarr.json +9 -0
  265. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +2 -0
  266. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  267. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/tables/zarr.json +9 -0
  268. ngio-0.5.0b1/tests/data/v05/images/test_image_tczyx.zarr/zarr.json +99 -0
  269. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/0/zarr.json +49 -0
  270. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/1/zarr.json +49 -0
  271. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/labels/label/0/zarr.json +44 -0
  272. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/labels/label/1/zarr.json +44 -0
  273. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/labels/label/zarr.json +65 -0
  274. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/labels/zarr.json +9 -0
  275. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +2 -0
  276. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  277. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/tables/zarr.json +9 -0
  278. ngio-0.5.0b1/tests/data/v05/images/test_image_tyx.zarr/zarr.json +74 -0
  279. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/0/zarr.json +52 -0
  280. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/1/zarr.json +52 -0
  281. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/labels/label/0/zarr.json +46 -0
  282. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/labels/label/1/zarr.json +46 -0
  283. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/labels/label/zarr.json +72 -0
  284. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/labels/zarr.json +9 -0
  285. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +2 -0
  286. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  287. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/tables/zarr.json +9 -0
  288. ngio-0.5.0b1/tests/data/v05/images/test_image_tzyx.zarr/zarr.json +81 -0
  289. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/0/zarr.json +46 -0
  290. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/1/zarr.json +46 -0
  291. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/labels/label/0/zarr.json +42 -0
  292. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/labels/label/1/zarr.json +42 -0
  293. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/labels/label/zarr.json +58 -0
  294. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/labels/zarr.json +9 -0
  295. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +2 -0
  296. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/zarr.json +11 -0
  297. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/tables/zarr.json +9 -0
  298. ngio-0.5.0b1/tests/data/v05/images/test_image_yx.zarr/zarr.json +67 -0
  299. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/0/zarr.json +49 -0
  300. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/1/zarr.json +49 -0
  301. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/labels/label/0/zarr.json +44 -0
  302. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/labels/label/1/zarr.json +44 -0
  303. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/labels/label/zarr.json +65 -0
  304. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/labels/zarr.json +9 -0
  305. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +2 -0
  306. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/zarr.json +11 -0
  307. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/tables/zarr.json +9 -0
  308. ngio-0.5.0b1/tests/data/v05/images/test_image_zyx.zarr/zarr.json +74 -0
  309. ngio-0.5.0b1/tests/stores/conftest.py +160 -0
  310. ngio-0.5.0b1/tests/stores/test_http_store.py +80 -0
  311. ngio-0.5.0b1/tests/stores/test_local_store.py +54 -0
  312. ngio-0.5.0b1/tests/stores/test_memory_store.py +54 -0
  313. ngio-0.5.0b1/tests/stores/test_s3_store.py +88 -0
  314. ngio-0.5.0b1/tests/stores/utils.py +168 -0
  315. ngio-0.5.0b1/tests/unit/common/test_roi.py +279 -0
  316. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/common/test_transforms.py +2 -2
  317. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/hcs/test_plate.py +5 -1
  318. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/images/test_create.py +93 -1
  319. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/images/test_images.py +21 -11
  320. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/images/test_omezarr_container.py +42 -13
  321. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/iterators/test_iterators.py +82 -44
  322. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_image_handler.py +4 -4
  323. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_unit_ngio_specs.py +2 -2
  324. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/ome_zarr_meta/test_unit_v04_utils.py +5 -14
  325. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_backends.py +3 -1
  326. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_masking_roi_table_v1.py +6 -24
  327. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_roi_table_v1.py +8 -32
  328. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/utils/test_zarr_utils.py +37 -0
  329. ngio-0.5.0a2/src/ngio/common/_pyramid.py +0 -283
  330. ngio-0.5.0a2/src/ngio/common/_roi.py +0 -387
  331. ngio-0.5.0a2/src/ngio/images/_create.py +0 -287
  332. ngio-0.5.0a2/src/ngio/images/_label.py +0 -342
  333. ngio-0.5.0a2/src/ngio/ome_zarr_meta/_meta_handlers.py +0 -828
  334. ngio-0.5.0a2/src/ngio/tables/backends/_csv.py +0 -35
  335. ngio-0.5.0a2/src/ngio/tables/backends/_non_zarr_backends.py +0 -196
  336. ngio-0.5.0a2/src/ngio/tables/backends/_parquet.py +0 -47
  337. ngio-0.5.0a2/src/ngio/utils/_logger.py +0 -50
  338. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +0 -86
  339. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +0 -3
  340. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +0 -27
  341. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +0 -27
  342. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +0 -5
  343. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +0 -3
  344. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +0 -59
  345. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +0 -3
  346. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +0 -25
  347. ngio-0.5.0a2/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +0 -25
  348. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/.zattrs +0 -79
  349. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/.zgroup +0 -3
  350. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +0 -25
  351. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +0 -25
  352. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +0 -5
  353. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +0 -3
  354. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +0 -52
  355. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +0 -3
  356. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +0 -23
  357. ngio-0.5.0a2/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +0 -23
  358. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/.zattrs +0 -86
  359. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/.zgroup +0 -3
  360. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +0 -27
  361. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +0 -27
  362. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +0 -5
  363. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +0 -3
  364. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +0 -59
  365. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +0 -3
  366. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +0 -25
  367. ngio-0.5.0a2/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +0 -25
  368. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +0 -86
  369. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +0 -3
  370. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +0 -27
  371. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +0 -27
  372. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +0 -5
  373. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +0 -3
  374. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +0 -59
  375. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +0 -3
  376. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +0 -25
  377. ngio-0.5.0a2/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +0 -25
  378. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +0 -93
  379. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +0 -3
  380. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +0 -29
  381. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +0 -29
  382. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +0 -5
  383. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +0 -3
  384. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +0 -66
  385. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +0 -3
  386. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +0 -27
  387. ngio-0.5.0a2/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +0 -27
  388. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/.zattrs +0 -68
  389. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/.zgroup +0 -3
  390. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +0 -25
  391. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +0 -25
  392. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +0 -5
  393. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +0 -3
  394. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +0 -59
  395. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +0 -3
  396. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +0 -25
  397. ngio-0.5.0a2/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +0 -25
  398. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +0 -75
  399. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +0 -3
  400. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +0 -27
  401. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +0 -27
  402. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +0 -5
  403. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +0 -3
  404. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +0 -66
  405. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +0 -3
  406. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +0 -27
  407. ngio-0.5.0a2/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +0 -27
  408. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/.zattrs +0 -61
  409. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/.zgroup +0 -3
  410. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/0/.zarray +0 -23
  411. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/1/.zarray +0 -23
  412. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +0 -5
  413. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +0 -3
  414. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +0 -52
  415. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +0 -3
  416. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +0 -23
  417. ngio-0.5.0a2/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +0 -23
  418. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/.zattrs +0 -68
  419. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/.zgroup +0 -3
  420. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +0 -25
  421. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +0 -25
  422. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +0 -5
  423. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +0 -3
  424. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +0 -59
  425. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +0 -3
  426. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +0 -25
  427. ngio-0.5.0a2/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +0 -25
  428. ngio-0.5.0a2/tests/unit/common/test_roi.py +0 -201
  429. {ngio-0.5.0a2 → ngio-0.5.0b1}/.copier-answers.yml +0 -0
  430. {ngio-0.5.0a2 → ngio-0.5.0b1}/.gitattributes +0 -0
  431. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/ISSUE_TEMPLATE.md +0 -0
  432. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/TEST_FAIL_TEMPLATE.md +0 -0
  433. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/dependabot.yml +0 -0
  434. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/pull_request_template.md +0 -0
  435. {ngio-0.5.0a2 → ngio-0.5.0b1}/.github/workflows/build_docs.yml +0 -0
  436. {ngio-0.5.0a2 → ngio-0.5.0b1}/.gitignore +0 -0
  437. {ngio-0.5.0a2 → ngio-0.5.0b1}/.pre-commit-config.yaml +0 -0
  438. {ngio-0.5.0a2 → ngio-0.5.0b1}/LICENSE +0 -0
  439. {ngio-0.5.0a2 → ngio-0.5.0b1}/README.md +0 -0
  440. {ngio-0.5.0a2 → ngio-0.5.0b1}/_typos.toml +0 -0
  441. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/hcs.md +0 -0
  442. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/images.md +0 -0
  443. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/iterators.md +0 -0
  444. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/common.md +0 -0
  445. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/hcs.md +0 -0
  446. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/images.md +0 -0
  447. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/io_pipes.md +0 -0
  448. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/iterators.md +0 -0
  449. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/ngio.md +0 -0
  450. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/tables.md +0 -0
  451. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/transforms.md +0 -0
  452. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ngio/utils.md +0 -0
  453. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/ome_zarr_container.md +0 -0
  454. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/api/tables.md +0 -0
  455. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/changelog.md +0 -0
  456. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/code_of_conduct.md +0 -0
  457. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/contributing.md +0 -0
  458. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/0_quickstart.md +0 -0
  459. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/1_ome_zarr_containers.md +0 -0
  460. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/2_images.md +0 -0
  461. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/3_tables.md +0 -0
  462. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/4_masked_images.md +0 -0
  463. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/5_hcs.md +0 -0
  464. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/getting_started/6_iterators.md +0 -0
  465. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/index.md +0 -0
  466. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/backend.md +0 -0
  467. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/overview.md +0 -0
  468. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/condition_table.md +0 -0
  469. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/custom_table.md +0 -0
  470. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/feature_table.md +0 -0
  471. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/generic_table.md +0 -0
  472. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/masking_roi_table.md +0 -0
  473. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/table_specs/table_types/roi_table.md +0 -0
  474. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/tutorials/create_ome_zarr.ipynb +0 -0
  475. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/tutorials/feature_extraction.ipynb +0 -0
  476. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/tutorials/hcs_exploration.ipynb +0 -0
  477. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/tutorials/image_processing.ipynb +0 -0
  478. {ngio-0.5.0a2 → ngio-0.5.0b1}/docs/tutorials/image_segmentation.ipynb +0 -0
  479. {ngio-0.5.0a2 → ngio-0.5.0b1}/mkdocs.yml +0 -0
  480. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/common/_dimensions.py +0 -0
  481. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/common/_synt_images_utils.py +0 -0
  482. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/common/_zoom.py +0 -0
  483. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/__init__.py +0 -0
  484. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/__init__.py +0 -0
  485. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_abstract_iterator.py +0 -0
  486. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_image_processing.py +0 -0
  487. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_mappers.py +0 -0
  488. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/experimental/iterators/_segmentation.py +0 -0
  489. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/hcs/__init__.py +0 -0
  490. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/__init__.py +0 -0
  491. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_masked_image.py +0 -0
  492. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/images/_table_ops.py +0 -0
  493. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/__init__.py +0 -0
  494. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_axes.py +0 -0
  495. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_slices.py +0 -0
  496. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_ops_transforms.py +0 -0
  497. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/io_pipes/_zoom_transform.py +0 -0
  498. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_channels.py +0 -0
  499. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +0 -0
  500. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v04/_custom_models.py +0 -0
  501. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/ome_zarr_meta/v05/_custom_models.py +0 -0
  502. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png +0 -0
  503. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png +0 -0
  504. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg +0 -0
  505. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/resources/__init__.py +0 -0
  506. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/resources/resource_model.py +0 -0
  507. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/__init__.py +0 -0
  508. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/_abstract_table.py +0 -0
  509. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/__init__.py +0 -0
  510. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_abstract_backend.py +0 -0
  511. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_table_backends.py +0 -0
  512. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/backends/_utils.py +0 -0
  513. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/v1/__init__.py +0 -0
  514. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/v1/_condition_table.py +0 -0
  515. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/v1/_feature_table.py +0 -0
  516. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/tables/v1/_generic_table.py +0 -0
  517. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/transforms/__init__.py +0 -0
  518. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/transforms/_zoom.py +0 -0
  519. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/_cache.py +0 -0
  520. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/_datasets.py +0 -0
  521. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/_errors.py +0 -0
  522. {ngio-0.5.0a2 → ngio-0.5.0b1}/src/ngio/utils/_fractal_fsspec_store.py +0 -0
  523. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_image_meta.json +0 -0
  524. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_image_meta_wrong_axis_order.json +0 -0
  525. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_label_meta.json +0 -0
  526. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/data/v04/meta/base_ome_zarr_well_meta.json +0 -0
  527. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/data/v04/meta/ome_zarr_well_path_normalization_meta.json +0 -0
  528. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/common/test_dimensions.py +0 -0
  529. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/common/test_pyramid.py +0 -0
  530. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/hcs/test_well.py +0 -0
  531. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/images/test_masked_images.py +0 -0
  532. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/images/test_table_ops.py +0 -0
  533. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/io_pipes/test_axes_ops.py +0 -0
  534. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/io_pipes/test_slicing_ops.py +0 -0
  535. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_backends_utils.py +0 -0
  536. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_feature_table.py +0 -0
  537. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_generic_table.py +0 -0
  538. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/tables/test_table_group.py +0 -0
  539. {ngio-0.5.0a2 → ngio-0.5.0b1}/tests/unit/utils/test_download_datasets.py +0 -0
@@ -51,7 +51,7 @@ jobs:
51
51
  python -m pip install -U pip
52
52
  # if running a cron job, we add the --pre flag to test against pre-releases
53
53
  python -m pip install .[test] ${{ github.event_name == 'schedule' && '--pre' || '' }}
54
-
54
+
55
55
  - name: Restore shared data cache
56
56
  id: cache-data
57
57
  uses: actions/cache@v4
@@ -79,6 +79,7 @@ jobs:
79
79
  update_existing: true
80
80
 
81
81
  - name: Coverage
82
+ if: success() && matrix.platform == 'ubuntu-latest'
82
83
  uses: codecov/codecov-action@v5
83
84
  with:
84
85
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -118,4 +119,4 @@ jobs:
118
119
  - uses: softprops/action-gh-release@v2
119
120
  with:
120
121
  generate_release_notes: true
121
- files: './dist/*'
122
+ files: "./dist/*"
@@ -6,13 +6,17 @@
6
6
  - Add support for OME-NGFF v0.5
7
7
  - Move to zarr-python v3
8
8
 
9
- ### API Changes
9
+ ### API Breaking Changes
10
10
 
11
+ - New `Roi` models, now supporting arbitrary axes.
11
12
  - The `compressor` argument has been renamed to `compressors` in all relevant functions and methods to reflect the support for multiple compressors in zarr v3.
12
13
  - The `version` argument has been renamed to `ngff_version` in all relevant functions and methods to specify the OME-NGFF version.
13
14
  - Remove the `parallel_safe` argument from all zarr related functions and methods. The locking mechanism is now handled internally and only depends on the
14
15
  `cache`.
15
16
  - Remove the unused `parent` argument from `ZarrGroupHandler`.
17
+ - Internal changes to `ZarrGroupHandler` to support cleanup unused apis.
18
+ - Remove `ngio_logger` in favor of standard warnings module.
19
+
16
20
  ## [v0.4.6]
17
21
 
18
22
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ngio
3
- Version: 0.5.0a2
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
@@ -31,7 +31,6 @@ Requires-Dist: pydantic
31
31
  Requires-Dist: requests
32
32
  Requires-Dist: zarr>3
33
33
  Provides-Extra: dev
34
- Requires-Dist: devtools; extra == 'dev'
35
34
  Requires-Dist: matplotlib; extra == 'dev'
36
35
  Requires-Dist: mypy; extra == 'dev'
37
36
  Requires-Dist: napari; extra == 'dev'
@@ -60,8 +59,13 @@ Requires-Dist: rich; extra == 'docs'
60
59
  Requires-Dist: scikit-image; extra == 'docs'
61
60
  Requires-Dist: tabulate; extra == 'docs'
62
61
  Provides-Extra: test
62
+ Requires-Dist: boto; extra == 'test'
63
+ Requires-Dist: devtools; extra == 'test'
64
+ Requires-Dist: moto[server]; extra == 'test'
63
65
  Requires-Dist: pytest; extra == 'test'
64
66
  Requires-Dist: pytest-cov; extra == 'test'
67
+ Requires-Dist: pytest-httpserver; extra == 'test'
68
+ Requires-Dist: s3fs; extra == 'test'
65
69
  Requires-Dist: scikit-image; extra == 'test'
66
70
  Description-Content-Type: text/markdown
67
71
 
@@ -54,14 +54,22 @@ dependencies = [
54
54
  # https://peps.python.org/pep-0621/#dependencies-optional-dependencies
55
55
  # "extras" (e.g. for `pip install .[test]`)
56
56
  [project.optional-dependencies]
57
- test = ["pytest", "pytest-cov", "scikit-image"]
57
+ test = [
58
+ "pytest",
59
+ "pytest-cov",
60
+ "scikit-image",
61
+ "moto[server]",
62
+ "boto",
63
+ "pytest_httpserver",
64
+ "devtools",
65
+ "s3fs",
66
+ ]
58
67
 
59
68
  dev = [
60
69
  "Pympler",
61
70
  "napari",
62
71
  "pyqt5",
63
72
  "matplotlib",
64
- "devtools",
65
73
  "notebook",
66
74
  "mypy",
67
75
  "pdbpp", # https://github.com/pdbpp/pdbpp
@@ -156,6 +164,8 @@ testpaths = ["tests"]
156
164
  filterwarnings = [
157
165
  "error",
158
166
  "ignore::zarr.errors.ZarrUserWarning", # required for anndata
167
+ "ignore::UserWarning", # from ngio.utils._zarr_utils
168
+ "ignore::DeprecationWarning", # temporary ignore deprecation warnings
159
169
  ]
160
170
  addopts = [
161
171
  "-vv",
@@ -224,6 +234,7 @@ test13 = { features = ["py13", "test"], solve-group = "py13" }
224
234
 
225
235
  # dev env
226
236
  dev = { features = ["dev", "test"], solve-group = "py11" }
237
+ test = { features = ["test"], solve-group = "py11" }
227
238
 
228
239
  [tool.pixi.tasks]
229
240
  serve_docs = "mkdocs serve"
@@ -9,7 +9,7 @@ except PackageNotFoundError: # pragma: no cover
9
9
  __author__ = "Lorenzo Cerrone"
10
10
  __email__ = "lorenzo.cerrone@uzh.ch"
11
11
 
12
- from ngio.common import Dimensions, Roi, RoiPixels
12
+ from ngio.common import Dimensions, Roi, RoiSlice
13
13
  from ngio.hcs import (
14
14
  OmeZarrPlate,
15
15
  OmeZarrWell,
@@ -52,7 +52,7 @@ __all__ = [
52
52
  "OmeZarrWell",
53
53
  "PixelSize",
54
54
  "Roi",
55
- "RoiPixels",
55
+ "RoiSlice",
56
56
  "create_empty_ome_zarr",
57
57
  "create_empty_plate",
58
58
  "create_empty_well",
@@ -2,22 +2,27 @@
2
2
 
3
3
  from ngio.common._dimensions import Dimensions
4
4
  from ngio.common._masking_roi import compute_masking_roi
5
- from ngio.common._pyramid import consolidate_pyramid, init_empty_pyramid, on_disk_zoom
6
- from ngio.common._roi import (
7
- Roi,
8
- RoiPixels,
5
+ from ngio.common._pyramid import (
6
+ ChunksLike,
7
+ ImagePyramidBuilder,
8
+ ShardsLike,
9
+ consolidate_pyramid,
10
+ on_disk_zoom,
9
11
  )
12
+ from ngio.common._roi import Roi, RoiSlice
10
13
  from ngio.common._zoom import InterpolationOrder, dask_zoom, numpy_zoom
11
14
 
12
15
  __all__ = [
16
+ "ChunksLike",
13
17
  "Dimensions",
18
+ "ImagePyramidBuilder",
14
19
  "InterpolationOrder",
15
20
  "Roi",
16
- "RoiPixels",
21
+ "RoiSlice",
22
+ "ShardsLike",
17
23
  "compute_masking_roi",
18
24
  "consolidate_pyramid",
19
25
  "dask_zoom",
20
- "init_empty_pyramid",
21
26
  "numpy_zoom",
22
27
  "on_disk_zoom",
23
28
  ]
@@ -7,7 +7,7 @@ import numpy as np
7
7
  import scipy.ndimage as ndi
8
8
  from dask.delayed import delayed
9
9
 
10
- from ngio.common._roi import Roi, RoiPixels
10
+ from ngio.common._roi import Roi
11
11
  from ngio.ome_zarr_meta import PixelSize
12
12
  from ngio.utils import NgioValueError
13
13
 
@@ -135,52 +135,23 @@ def compute_masking_roi(
135
135
  rois = []
136
136
  for label, slice_ in slices.items():
137
137
  if len(slice_) == 2:
138
- min_t, max_t = None, None
139
- min_z, max_z = None, None
140
- min_y, min_x = slice_[0].start, slice_[1].start
141
- max_y, max_x = slice_[0].stop, slice_[1].stop
138
+ slices = {"y": slice_[0], "x": slice_[1]}
142
139
  elif len(slice_) == 3:
143
- min_t, max_t = None, None
144
- min_z, min_y, min_x = slice_[0].start, slice_[1].start, slice_[2].start
145
- max_z, max_y, max_x = slice_[0].stop, slice_[1].stop, slice_[2].stop
140
+ slices = {"z": slice_[0], "y": slice_[1], "x": slice_[2]}
146
141
  elif len(slice_) == 4:
147
- min_t, min_z, min_y, min_x = (
148
- slice_[0].start,
149
- slice_[1].start,
150
- slice_[2].start,
151
- slice_[3].start,
152
- )
153
- max_t, max_z, max_y, max_x = (
154
- slice_[0].stop,
155
- slice_[1].stop,
156
- slice_[2].stop,
157
- slice_[3].stop,
158
- )
142
+ slices = {
143
+ "t": slice_[0],
144
+ "z": slice_[1],
145
+ "y": slice_[2],
146
+ "x": slice_[3],
147
+ }
159
148
  else:
160
149
  raise ValueError("Invalid slice length.")
161
150
 
162
- if max_t is None:
163
- t_length = None
164
- else:
165
- t_length = max_t - min_t
166
-
167
- if max_z is None:
168
- z_length = None
169
- else:
170
- z_length = max_z - min_z
171
-
172
- roi = RoiPixels(
173
- name=str(label),
174
- x_length=max_x - min_x,
175
- y_length=max_y - min_y,
176
- z_length=z_length,
177
- t_length=t_length,
178
- x=min_x,
179
- y=min_y,
180
- z=min_z,
181
- label=label,
151
+ roi = Roi.from_values(
152
+ name=str(label), slices=slices, label=label, space="pixel"
182
153
  )
183
154
 
184
- roi = roi.to_roi(pixel_size)
155
+ roi = roi.to_world(pixel_size=pixel_size)
185
156
  rois.append(roi)
186
157
  return rois
@@ -0,0 +1,413 @@
1
+ from collections.abc import Callable, Mapping, Sequence
2
+ from typing import Any, Literal
3
+
4
+ import dask.array as da
5
+ import numpy as np
6
+ import zarr
7
+ from pydantic import BaseModel, ConfigDict, model_validator
8
+
9
+ from ngio.common._zoom import (
10
+ InterpolationOrder,
11
+ _zoom_inputs_check,
12
+ dask_zoom,
13
+ numpy_zoom,
14
+ )
15
+ from ngio.utils import (
16
+ NgioValueError,
17
+ )
18
+
19
+
20
+ def _on_disk_numpy_zoom(
21
+ source: zarr.Array,
22
+ target: zarr.Array,
23
+ order: InterpolationOrder,
24
+ ) -> None:
25
+ source_array = source[...]
26
+ if not isinstance(source_array, np.ndarray):
27
+ raise NgioValueError("source zarr array could not be read as a numpy array")
28
+ target[...] = numpy_zoom(source_array, target_shape=target.shape, order=order)
29
+
30
+
31
+ def _on_disk_dask_zoom(
32
+ source: zarr.Array,
33
+ target: zarr.Array,
34
+ order: InterpolationOrder,
35
+ ) -> None:
36
+ source_array = da.from_zarr(source)
37
+ target_array = dask_zoom(source_array, target_shape=target.shape, order=order)
38
+
39
+ # This is a potential fix for Dask 2025.11
40
+ # import dask.config
41
+ # chunk_size_bytes = np.prod(target.chunks) * target_array.dtype.itemsize
42
+ # current_chunk_size = dask.config.get("array.chunk-size")
43
+ # Increase the chunk size to avoid dask potentially creating
44
+ # corrupted chunks when writing chunks that are not multiple of the
45
+ # target chunk size
46
+ # dask.config.set({"array.chunk-size": f"{chunk_size_bytes}B"})
47
+ target_array = target_array.rechunk(target.chunks)
48
+ target_array = target_array.compute_chunk_sizes()
49
+ target_array.to_zarr(target)
50
+ # Restore previous chunk size
51
+ # dask.config.set({"array.chunk-size": current_chunk_size})
52
+
53
+
54
+ def _on_disk_coarsen(
55
+ source: zarr.Array,
56
+ target: zarr.Array,
57
+ order: InterpolationOrder = "linear",
58
+ aggregation_function: Callable | None = None,
59
+ ) -> None:
60
+ """Apply a coarsening operation from a source zarr array to a target zarr array.
61
+
62
+ Args:
63
+ source (zarr.Array): The source array to coarsen.
64
+ target (zarr.Array): The target array to save the coarsened result to.
65
+ order (InterpolationOrder): The order of interpolation is not really implemented
66
+ for coarsening, but it is kept for compatibility with the zoom function.
67
+ order="linear" -> linear interpolation ~ np.mean
68
+ order="nearest" -> nearest interpolation ~ np.max
69
+ aggregation_function (np.ufunc): The aggregation function to use.
70
+ """
71
+ source_array = da.from_zarr(source)
72
+
73
+ _scale, _target_shape = _zoom_inputs_check(
74
+ source_array=source_array, scale=None, target_shape=target.shape
75
+ )
76
+
77
+ assert _target_shape == target.shape, (
78
+ "Target shape must match the target array shape"
79
+ )
80
+
81
+ if aggregation_function is None:
82
+ if order == "linear":
83
+ aggregation_function = np.mean
84
+ elif order == "nearest":
85
+ aggregation_function = np.max
86
+ elif order == "cubic":
87
+ raise NgioValueError("Cubic interpolation is not supported for coarsening.")
88
+ else:
89
+ raise NgioValueError(
90
+ f"Aggregation function must be provided for order {order}"
91
+ )
92
+
93
+ coarsening_setup = {}
94
+ for i, s in enumerate(_scale):
95
+ factor = 1 / s
96
+ # This check is very strict, but it is necessary to avoid
97
+ # a few pixels shift in the coarsening
98
+ # We could add a tolerance
99
+ if factor.is_integer():
100
+ coarsening_setup[i] = int(factor)
101
+ else:
102
+ raise NgioValueError(
103
+ f"Coarsening factor must be an integer, got {factor} on axis {i}"
104
+ )
105
+
106
+ out_target = da.coarsen(
107
+ aggregation_function, source_array, coarsening_setup, trim_excess=True
108
+ )
109
+ out_target = out_target.rechunk(target.chunks)
110
+ out_target.to_zarr(target)
111
+
112
+
113
+ def on_disk_zoom(
114
+ source: zarr.Array,
115
+ target: zarr.Array,
116
+ order: InterpolationOrder = "linear",
117
+ mode: Literal["dask", "numpy", "coarsen"] = "dask",
118
+ ) -> None:
119
+ """Apply a zoom operation from a source zarr array to a target zarr array.
120
+
121
+ Args:
122
+ source (zarr.Array): The source array to zoom.
123
+ target (zarr.Array): The target array to save the zoomed result to.
124
+ order (InterpolationOrder): The order of interpolation. Defaults to "linear".
125
+ mode (Literal["dask", "numpy", "coarsen"]): The mode to use. Defaults to "dask".
126
+ """
127
+ if not isinstance(source, zarr.Array):
128
+ raise NgioValueError("source must be a zarr array")
129
+
130
+ if not isinstance(target, zarr.Array):
131
+ raise NgioValueError("target must be a zarr array")
132
+
133
+ if source.dtype != target.dtype:
134
+ raise NgioValueError("source and target must have the same dtype")
135
+
136
+ match mode:
137
+ case "numpy":
138
+ return _on_disk_numpy_zoom(source, target, order)
139
+ case "dask":
140
+ return _on_disk_dask_zoom(source, target, order)
141
+ case "coarsen":
142
+ return _on_disk_coarsen(
143
+ source,
144
+ target,
145
+ )
146
+ case _:
147
+ raise NgioValueError("mode must be either 'dask', 'numpy' or 'coarsen'")
148
+
149
+
150
+ def _find_closest_arrays(
151
+ processed: list[zarr.Array], to_be_processed: list[zarr.Array]
152
+ ) -> tuple[np.intp, np.intp]:
153
+ dist_matrix = np.zeros((len(processed), len(to_be_processed)))
154
+ for i, arr_to_proc in enumerate(to_be_processed):
155
+ for j, proc_arr in enumerate(processed):
156
+ dist_matrix[j, i] = np.sqrt(
157
+ np.sum(
158
+ [
159
+ (s1 - s2) ** 2
160
+ for s1, s2 in zip(
161
+ arr_to_proc.shape, proc_arr.shape, strict=False
162
+ )
163
+ ]
164
+ )
165
+ )
166
+
167
+ indices = np.unravel_index(dist_matrix.argmin(), dist_matrix.shape)
168
+ assert len(indices) == 2, "Indices must be of length 2"
169
+ return indices
170
+
171
+
172
+ def consolidate_pyramid(
173
+ source: zarr.Array,
174
+ targets: list[zarr.Array],
175
+ order: InterpolationOrder = "linear",
176
+ mode: Literal["dask", "numpy", "coarsen"] = "dask",
177
+ ) -> None:
178
+ """Consolidate the Zarr array."""
179
+ processed = [source]
180
+ to_be_processed = targets
181
+
182
+ while to_be_processed:
183
+ source_id, target_id = _find_closest_arrays(processed, to_be_processed)
184
+
185
+ source_image = processed[source_id]
186
+ target_image = to_be_processed.pop(target_id)
187
+
188
+ on_disk_zoom(
189
+ source=source_image,
190
+ target=target_image,
191
+ mode=mode,
192
+ order=order,
193
+ )
194
+ processed.append(target_image)
195
+
196
+
197
+ ################################################
198
+ #
199
+ # Builders for image pyramids
200
+ #
201
+ ################################################
202
+
203
+ ChunksLike = tuple[int, ...] | Literal["auto"]
204
+ ShardsLike = tuple[int, ...] | Literal["auto"]
205
+
206
+
207
+ def shapes_from_scaling_factors(
208
+ base_shape: tuple[int, ...],
209
+ scaling_factors: tuple[float, ...],
210
+ num_levels: int,
211
+ ) -> list[tuple[int, ...]]:
212
+ """Compute the shapes of each level in the pyramid from scaling factors.
213
+
214
+ Args:
215
+ base_shape (tuple[int, ...]): The shape of the base level.
216
+ scaling_factors (tuple[float, ...]): The scaling factors between levels.
217
+ num_levels (int): The number of levels in the pyramid.
218
+
219
+ Returns:
220
+ list[tuple[int, ...]]: The shapes of each level in the pyramid.
221
+ """
222
+ shapes = []
223
+ current_shape = base_shape
224
+ for _ in range(num_levels):
225
+ shapes.append(current_shape)
226
+ current_shape = tuple(
227
+ max(1, int(s / f))
228
+ for s, f in zip(current_shape, scaling_factors, strict=True)
229
+ )
230
+ return shapes
231
+
232
+
233
+ def _check_order(shapes: Sequence[tuple[int, ...]]):
234
+ """Check if the shapes are in decreasing order."""
235
+ num_pixels = [np.prod(shape) for shape in shapes]
236
+ for i in range(1, len(num_pixels)):
237
+ if num_pixels[i] >= num_pixels[i - 1]:
238
+ raise NgioValueError("Shapes are not in decreasing order.")
239
+
240
+
241
+ class PyramidLevel(BaseModel):
242
+ path: str
243
+ shape: tuple[int, ...]
244
+ scale: tuple[float, ...]
245
+ chunks: ChunksLike = "auto"
246
+ shards: ShardsLike | None = None
247
+
248
+ @model_validator(mode="after")
249
+ def _model_validation(self) -> "PyramidLevel":
250
+ # Same length as shape
251
+ if len(self.scale) != len(self.shape):
252
+ raise NgioValueError(
253
+ "Scale must have the same length as shape "
254
+ f"({len(self.shape)}), got {len(self.scale)}"
255
+ )
256
+ if any(isinstance(s, float) and s < 0 for s in self.scale):
257
+ raise NgioValueError("Scale values must be positive.")
258
+
259
+ if isinstance(self.chunks, tuple):
260
+ if len(self.chunks) != len(self.shape):
261
+ raise NgioValueError(
262
+ "Chunks must have the same length as shape "
263
+ f"({len(self.shape)}), got {len(self.chunks)}"
264
+ )
265
+ normalized_chunks = []
266
+ for dim_size, chunk_size in zip(self.shape, self.chunks, strict=True):
267
+ normalized_chunks.append(min(dim_size, chunk_size))
268
+ self.chunks = tuple(normalized_chunks)
269
+
270
+ if isinstance(self.shards, tuple):
271
+ if len(self.shards) != len(self.shape):
272
+ raise NgioValueError(
273
+ "Shards must have the same length as shape "
274
+ f"({len(self.shape)}), got {len(self.shards)}"
275
+ )
276
+ return self
277
+
278
+
279
+ class ImagePyramidBuilder(BaseModel):
280
+ levels: list[PyramidLevel]
281
+ axes: tuple[str, ...]
282
+ data_type: str = "uint16"
283
+ dimension_separator: Literal[".", "/"] = "/"
284
+ compressors: Any = "auto"
285
+ zarr_format: Literal[2, 3] = 2
286
+ other_array_kwargs: Mapping[str, Any] = {}
287
+
288
+ model_config = ConfigDict(arbitrary_types_allowed=True)
289
+
290
+ @classmethod
291
+ def from_scaling_factors(
292
+ cls,
293
+ levels_paths: tuple[str, ...],
294
+ scaling_factors: tuple[float, ...],
295
+ base_shape: tuple[int, ...],
296
+ base_scale: tuple[float, ...],
297
+ axes: tuple[str, ...],
298
+ chunks: ChunksLike = "auto",
299
+ shards: ShardsLike | None = None,
300
+ data_type: str = "uint16",
301
+ dimension_separator: Literal[".", "/"] = "/",
302
+ compressors: Any = "auto",
303
+ zarr_format: Literal[2, 3] = 2,
304
+ other_array_kwargs: Mapping[str, Any] | None = None,
305
+ ) -> "ImagePyramidBuilder":
306
+ shapes = shapes_from_scaling_factors(
307
+ base_shape=base_shape,
308
+ scaling_factors=scaling_factors,
309
+ num_levels=len(levels_paths),
310
+ )
311
+ return cls.from_shapes(
312
+ shapes=shapes,
313
+ base_scale=base_scale,
314
+ axes=axes,
315
+ levels_paths=levels_paths,
316
+ chunks=chunks,
317
+ shards=shards,
318
+ data_type=data_type,
319
+ dimension_separator=dimension_separator,
320
+ compressors=compressors,
321
+ zarr_format=zarr_format,
322
+ other_array_kwargs=other_array_kwargs,
323
+ )
324
+
325
+ @classmethod
326
+ def from_shapes(
327
+ cls,
328
+ shapes: Sequence[tuple[int, ...]],
329
+ base_scale: tuple[float, ...],
330
+ axes: tuple[str, ...],
331
+ levels_paths: Sequence[str] | None = None,
332
+ chunks: ChunksLike = "auto",
333
+ shards: ShardsLike | None = None,
334
+ data_type: str = "uint16",
335
+ dimension_separator: Literal[".", "/"] = "/",
336
+ compressors: Any = "auto",
337
+ zarr_format: Literal[2, 3] = 2,
338
+ other_array_kwargs: Mapping[str, Any] | None = None,
339
+ ) -> "ImagePyramidBuilder":
340
+ levels = []
341
+ if levels_paths is None:
342
+ levels_paths = tuple(str(i) for i in range(len(shapes)))
343
+ _check_order(shapes)
344
+ scale_ = base_scale
345
+ for i, (path, shape) in enumerate(zip(levels_paths, shapes, strict=True)):
346
+ levels.append(
347
+ PyramidLevel(
348
+ path=path,
349
+ shape=shape,
350
+ scale=scale_,
351
+ chunks=chunks,
352
+ shards=shards,
353
+ )
354
+ )
355
+ if i + 1 < len(shapes):
356
+ # This only works for downsampling pyramids
357
+ # The _check_order function ensures that
358
+ # shapes are decreasing
359
+ next_shape = shapes[i + 1]
360
+ scaling_factor = tuple(
361
+ s1 / s2
362
+ for s1, s2 in zip(
363
+ shape,
364
+ next_shape,
365
+ strict=True,
366
+ )
367
+ )
368
+ scale_ = tuple(
369
+ s * f for s, f in zip(scale_, scaling_factor, strict=True)
370
+ )
371
+ other_array_kwargs = other_array_kwargs or {}
372
+ return cls(
373
+ levels=levels,
374
+ axes=axes,
375
+ data_type=data_type,
376
+ dimension_separator=dimension_separator,
377
+ compressors=compressors,
378
+ zarr_format=zarr_format,
379
+ other_array_kwargs=other_array_kwargs,
380
+ )
381
+
382
+ def to_zarr(self, group: zarr.Group) -> None:
383
+ """Save the pyramid specification to a Zarr group.
384
+
385
+ Args:
386
+ group (zarr.Group): The Zarr group to save the pyramid specification to.
387
+ """
388
+ array_static_kwargs = {
389
+ "dtype": self.data_type,
390
+ "overwrite": True,
391
+ "compressors": self.compressors,
392
+ **self.other_array_kwargs,
393
+ }
394
+
395
+ if self.zarr_format == 2:
396
+ array_static_kwargs["chunk_key_encoding"] = {
397
+ "name": "v2",
398
+ "separator": self.dimension_separator,
399
+ }
400
+ else:
401
+ array_static_kwargs["chunk_key_encoding"] = {
402
+ "name": "default",
403
+ "separator": self.dimension_separator,
404
+ }
405
+ array_static_kwargs["dimension_names"] = self.axes
406
+ for p_level in self.levels:
407
+ group.create_array(
408
+ name=p_level.path,
409
+ shape=tuple(p_level.shape),
410
+ chunks=p_level.chunks,
411
+ shards=p_level.shards,
412
+ **array_static_kwargs,
413
+ )