ngio 0.2.3__tar.gz → 0.2.5__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 (207) hide show
  1. {ngio-0.2.3 → ngio-0.2.5}/PKG-INFO +1 -1
  2. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/hcs/plate.py +16 -4
  3. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/ome_zarr_container.py +16 -4
  4. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +5 -0
  5. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_utils.py +4 -0
  6. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/tables_container.py +11 -2
  7. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/v1/_roi_table.py +8 -3
  8. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/hcs/test_plate.py +3 -0
  9. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_backends_utils.py +12 -1
  10. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_roi_table_v1.py +49 -2
  11. ngio-0.2.3/index.md +0 -0
  12. {ngio-0.2.3 → ngio-0.2.5}/.copier-answers.yml +0 -0
  13. {ngio-0.2.3 → ngio-0.2.5}/.gitattributes +0 -0
  14. {ngio-0.2.3 → ngio-0.2.5}/.github/ISSUE_TEMPLATE.md +0 -0
  15. {ngio-0.2.3 → ngio-0.2.5}/.github/TEST_FAIL_TEMPLATE.md +0 -0
  16. {ngio-0.2.3 → ngio-0.2.5}/.github/dependabot.yml +0 -0
  17. {ngio-0.2.3 → ngio-0.2.5}/.github/scripts/download_data.sh +0 -0
  18. {ngio-0.2.3 → ngio-0.2.5}/.github/workflows/build_docs.yml +0 -0
  19. {ngio-0.2.3 → ngio-0.2.5}/.github/workflows/ci.yml +0 -0
  20. {ngio-0.2.3 → ngio-0.2.5}/.gitignore +0 -0
  21. {ngio-0.2.3 → ngio-0.2.5}/.pre-commit-config.yaml +0 -0
  22. {ngio-0.2.3 → ngio-0.2.5}/LICENSE +0 -0
  23. {ngio-0.2.3 → ngio-0.2.5}/README.md +0 -0
  24. {ngio-0.2.3 → ngio-0.2.5}/_typos.toml +0 -0
  25. {ngio-0.2.3 → ngio-0.2.5}/docs/api/common.md +0 -0
  26. {ngio-0.2.3 → ngio-0.2.5}/docs/api/hcs.md +0 -0
  27. {ngio-0.2.3 → ngio-0.2.5}/docs/api/images.md +0 -0
  28. {ngio-0.2.3 → ngio-0.2.5}/docs/api/ngio.md +0 -0
  29. {ngio-0.2.3 → ngio-0.2.5}/docs/api/tables.md +0 -0
  30. {ngio-0.2.3 → ngio-0.2.5}/docs/api/utils.md +0 -0
  31. {ngio-0.2.3 → ngio-0.2.5}/docs/code_of_conduct.md +0 -0
  32. {ngio-0.2.3 → ngio-0.2.5}/docs/contributing.md +0 -0
  33. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/0_quickstart.md +0 -0
  34. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/1_ome_zarr_containers.md +0 -0
  35. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/2_images.md +0 -0
  36. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/3_tables.md +0 -0
  37. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/4_masked_images.md +0 -0
  38. {ngio-0.2.3 → ngio-0.2.5}/docs/getting_started/5_hcs.md +0 -0
  39. {ngio-0.2.3 → ngio-0.2.5}/docs/index.md +0 -0
  40. {ngio-0.2.3 → ngio-0.2.5}/docs/tutorials/feature_extraction.ipynb +0 -0
  41. {ngio-0.2.3 → ngio-0.2.5}/docs/tutorials/hcs_processing.ipynb +0 -0
  42. {ngio-0.2.3 → ngio-0.2.5}/docs/tutorials/image_processing.ipynb +0 -0
  43. {ngio-0.2.3 → ngio-0.2.5}/docs/tutorials/image_segmentation.ipynb +0 -0
  44. {ngio-0.2.3 → ngio-0.2.5}/mkdocs.yml +0 -0
  45. {ngio-0.2.3 → ngio-0.2.5}/pyproject.toml +0 -0
  46. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/__init__.py +0 -0
  47. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/__init__.py +0 -0
  48. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_array_pipe.py +0 -0
  49. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_axes_transforms.py +0 -0
  50. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_common_types.py +0 -0
  51. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_dimensions.py +0 -0
  52. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_masking_roi.py +0 -0
  53. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_pyramid.py +0 -0
  54. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_roi.py +0 -0
  55. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_slicer.py +0 -0
  56. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/common/_zoom.py +0 -0
  57. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/hcs/__init__.py +0 -0
  58. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/__init__.py +0 -0
  59. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/abstract_image.py +0 -0
  60. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/create.py +0 -0
  61. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/image.py +0 -0
  62. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/label.py +0 -0
  63. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/images/masked_image.py +0 -0
  64. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/__init__.py +0 -0
  65. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/_meta_handlers.py +0 -0
  66. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/__init__.py +0 -0
  67. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_axes.py +0 -0
  68. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_channels.py +0 -0
  69. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_dataset.py +0 -0
  70. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +0 -0
  71. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +0 -0
  72. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/v04/__init__.py +0 -0
  73. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/v04/_custom_models.py +0 -0
  74. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/ome_zarr_meta/v04/_v04_spec_utils.py +0 -0
  75. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/__init__.py +0 -0
  76. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/_validators.py +0 -0
  77. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/__init__.py +0 -0
  78. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_abstract_backend.py +0 -0
  79. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_anndata_utils.py +0 -0
  80. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_anndata_v1.py +0 -0
  81. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_csv_v1.py +0 -0
  82. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_json_v1.py +0 -0
  83. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/backends/_table_backends.py +0 -0
  84. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/v1/__init__.py +0 -0
  85. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/v1/_feature_table.py +0 -0
  86. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/tables/v1/_generic_table.py +0 -0
  87. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/__init__.py +0 -0
  88. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/_datasets.py +0 -0
  89. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/_errors.py +0 -0
  90. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/_fractal_fsspec_store.py +0 -0
  91. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/_logger.py +0 -0
  92. {ngio-0.2.3 → ngio-0.2.5}/src/ngio/utils/_zarr_utils.py +0 -0
  93. {ngio-0.2.3 → ngio-0.2.5}/tests/conftest.py +0 -0
  94. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +0 -0
  95. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +0 -0
  96. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +0 -0
  97. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +0 -0
  98. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +0 -0
  99. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +0 -0
  100. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +0 -0
  101. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +0 -0
  102. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +0 -0
  103. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +0 -0
  104. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/.zattrs +0 -0
  105. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/.zgroup +0 -0
  106. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +0 -0
  107. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +0 -0
  108. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +0 -0
  109. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +0 -0
  110. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +0 -0
  111. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +0 -0
  112. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +0 -0
  113. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +0 -0
  114. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/.zattrs +0 -0
  115. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/.zgroup +0 -0
  116. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +0 -0
  117. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +0 -0
  118. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +0 -0
  119. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +0 -0
  120. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +0 -0
  121. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +0 -0
  122. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +0 -0
  123. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +0 -0
  124. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +0 -0
  125. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +0 -0
  126. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +0 -0
  127. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +0 -0
  128. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +0 -0
  129. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +0 -0
  130. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +0 -0
  131. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +0 -0
  132. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +0 -0
  133. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +0 -0
  134. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +0 -0
  135. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +0 -0
  136. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +0 -0
  137. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +0 -0
  138. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +0 -0
  139. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +0 -0
  140. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +0 -0
  141. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +0 -0
  142. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +0 -0
  143. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +0 -0
  144. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/.zattrs +0 -0
  145. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/.zgroup +0 -0
  146. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +0 -0
  147. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +0 -0
  148. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +0 -0
  149. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +0 -0
  150. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +0 -0
  151. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +0 -0
  152. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +0 -0
  153. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +0 -0
  154. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +0 -0
  155. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +0 -0
  156. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +0 -0
  157. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +0 -0
  158. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +0 -0
  159. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +0 -0
  160. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +0 -0
  161. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +0 -0
  162. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +0 -0
  163. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +0 -0
  164. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/.zattrs +0 -0
  165. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/.zgroup +0 -0
  166. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/0/.zarray +0 -0
  167. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/1/.zarray +0 -0
  168. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +0 -0
  169. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +0 -0
  170. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +0 -0
  171. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +0 -0
  172. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +0 -0
  173. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +0 -0
  174. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/.zattrs +0 -0
  175. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/.zgroup +0 -0
  176. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +0 -0
  177. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +0 -0
  178. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +0 -0
  179. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +0 -0
  180. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +0 -0
  181. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +0 -0
  182. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +0 -0
  183. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +0 -0
  184. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/meta/base_ome_zarr_image_meta.json +0 -0
  185. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/meta/base_ome_zarr_image_meta_wrong_axis_order.json +0 -0
  186. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/meta/base_ome_zarr_label_meta.json +0 -0
  187. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/meta/base_ome_zarr_well_meta.json +0 -0
  188. {ngio-0.2.3 → ngio-0.2.5}/tests/data/v04/meta/ome_zarr_well_path_normalization_meta.json +0 -0
  189. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/common/test_dimensions.py +0 -0
  190. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/common/test_pyramid.py +0 -0
  191. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/common/test_roi.py +0 -0
  192. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/hcs/test_well.py +0 -0
  193. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/images/test_create.py +0 -0
  194. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/images/test_images.py +0 -0
  195. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/images/test_masked_images.py +0 -0
  196. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/images/test_omezarr_container.py +0 -0
  197. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/ome_zarr_meta/test_image_handler.py +0 -0
  198. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/ome_zarr_meta/test_unit_ngio_specs.py +0 -0
  199. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/ome_zarr_meta/test_unit_v04_utils.py +0 -0
  200. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_backends.py +0 -0
  201. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_feature_table.py +0 -0
  202. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_generic_table.py +0 -0
  203. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_masking_roi_table_v1.py +0 -0
  204. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_table_group.py +0 -0
  205. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/tables/test_validators.py +0 -0
  206. {ngio-0.2.3 → ngio-0.2.5}/tests/unit/utils/test_download_datasets.py +0 -0
  207. {ngio-0.2.3 → ngio-0.2.5}/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.2.3
3
+ Version: 0.2.5
4
4
  Summary: Next Generation file format IO
5
5
  Project-URL: homepage, https://github.com/lorenzocerrone/ngio
6
6
  Project-URL: repository, https://github.com/lorenzocerrone/ngio
@@ -686,6 +686,9 @@ class OmeZarrPlate:
686
686
  """List all ROI tables in the image."""
687
687
  return self.tables_container.list_roi_tables()
688
688
 
689
+ @overload
690
+ def get_table(self, name: str) -> Table: ...
691
+
689
692
  @overload
690
693
  def get_table(self, name: str, check_type: None) -> Table: ...
691
694
 
@@ -708,8 +711,19 @@ class OmeZarrPlate:
708
711
  ) -> GenericRoiTable: ...
709
712
 
710
713
  def get_table(self, name: str, check_type: TypedTable | None = None) -> Table:
711
- """Get a table from the image."""
712
- table = self.tables_container.get(name)
714
+ """Get a table from the image.
715
+
716
+ Args:
717
+ name (str): The name of the table.
718
+ check_type (TypedTable | None): The type of the table. If None, the
719
+ type is not checked. If a type is provided, the table must be of that
720
+ type.
721
+ """
722
+ if check_type is None:
723
+ table = self.tables_container.get(name, strict=False)
724
+ return table
725
+
726
+ table = self.tables_container.get(name, strict=True)
713
727
  match check_type:
714
728
  case "roi_table":
715
729
  if not isinstance(table, RoiTable):
@@ -740,8 +754,6 @@ class OmeZarrPlate:
740
754
  f"Found type: {table.type()}"
741
755
  )
742
756
  return table
743
- case None:
744
- return table
745
757
  case _:
746
758
  raise NgioValueError(f"Unknown check_type: {check_type}")
747
759
 
@@ -353,6 +353,9 @@ class OmeZarrContainer:
353
353
  """List all ROI tables in the image."""
354
354
  return self.tables_container.list_roi_tables()
355
355
 
356
+ @overload
357
+ def get_table(self, name: str) -> Table: ...
358
+
356
359
  @overload
357
360
  def get_table(self, name: str, check_type: None) -> Table: ...
358
361
 
@@ -375,8 +378,19 @@ class OmeZarrContainer:
375
378
  ) -> GenericRoiTable: ...
376
379
 
377
380
  def get_table(self, name: str, check_type: TypedTable | None = None) -> Table:
378
- """Get a table from the image."""
379
- table = self.tables_container.get(name)
381
+ """Get a table from the image.
382
+
383
+ Args:
384
+ name (str): The name of the table.
385
+ check_type (TypedTable | None): The type of the table. If None, the
386
+ type is not checked. If a type is provided, the table must be of that
387
+ type.
388
+ """
389
+ if check_type is None:
390
+ table = self.tables_container.get(name, strict=False)
391
+ return table
392
+
393
+ table = self.tables_container.get(name, strict=True)
380
394
  match check_type:
381
395
  case "roi_table":
382
396
  if not isinstance(table, RoiTable):
@@ -407,8 +421,6 @@ class OmeZarrContainer:
407
421
  f"Found type: {table.type()}"
408
422
  )
409
423
  return table
410
- case None:
411
- return table
412
424
  case _:
413
425
  raise NgioValueError(f"Unknown check_type: {check_type}")
414
426
 
@@ -361,6 +361,7 @@ class NgioPlateMeta(HCSAttrs):
361
361
  acquisitions=self.plate.acquisitions,
362
362
  wells=wells,
363
363
  field_count=self.plate.field_count,
364
+ name=self.plate.name,
364
365
  version=self.plate.version,
365
366
  )
366
367
  return NgioPlateMeta(plate=new_plate), row_idx
@@ -398,6 +399,7 @@ class NgioPlateMeta(HCSAttrs):
398
399
  acquisitions=self.plate.acquisitions,
399
400
  wells=wells,
400
401
  field_count=self.plate.field_count,
402
+ name=self.plate.name,
401
403
  version=self.plate.version,
402
404
  )
403
405
  return NgioPlateMeta(plate=new_plate), column_idx
@@ -435,6 +437,7 @@ class NgioPlateMeta(HCSAttrs):
435
437
  acquisitions=plate.plate.acquisitions,
436
438
  wells=wells,
437
439
  field_count=plate.plate.field_count,
440
+ name=plate.plate.name,
438
441
  version=plate.plate.version,
439
442
  )
440
443
  return NgioPlateMeta(plate=new_plate)
@@ -473,6 +476,7 @@ class NgioPlateMeta(HCSAttrs):
473
476
  acquisitions=acquisitions,
474
477
  wells=self.plate.wells,
475
478
  field_count=self.plate.field_count,
479
+ name=self.plate.name,
476
480
  version=self.plate.version,
477
481
  )
478
482
  return NgioPlateMeta(plate=new_plate)
@@ -508,6 +512,7 @@ class NgioPlateMeta(HCSAttrs):
508
512
  acquisitions=self.plate.acquisitions,
509
513
  wells=wells,
510
514
  field_count=self.plate.field_count,
515
+ name=self.plate.name,
511
516
  version=self.plate.version,
512
517
  )
513
518
  return NgioPlateMeta(plate=new_plate)
@@ -53,6 +53,10 @@ def _validate_index_key_df(pandas_df: DataFrame, index_key: str | None) -> DataF
53
53
  pandas_df.index.name = index_key
54
54
  return pandas_df
55
55
 
56
+ if pandas_df.index.name is None:
57
+ pandas_df.index.name = index_key
58
+ return pandas_df
59
+
56
60
  raise NgioTableValidationError(f"Index key '{index_key}' is not found in DataFrame")
57
61
 
58
62
 
@@ -90,6 +90,7 @@ class ImplementedTables:
90
90
  version: str,
91
91
  handler: ZarrGroupHandler,
92
92
  backend_name: str | None = None,
93
+ strict: bool = True,
93
94
  ) -> Table:
94
95
  """Try to get a handler for the given store based on the metadata version."""
95
96
  _errors = {}
@@ -102,7 +103,12 @@ class ImplementedTables:
102
103
  )
103
104
  return table
104
105
  except Exception as e:
105
- _errors[name] = e
106
+ if strict:
107
+ raise NgioValidationError(
108
+ f"Could not load table {name} from handler. Error: {e}"
109
+ ) from e
110
+ else:
111
+ _errors[name] = e
106
112
  # If no table was found, we can try to load the table from a generic table
107
113
  try:
108
114
  table = GenericTable._from_handler(
@@ -207,7 +213,9 @@ class TablesContainer:
207
213
  filtered_tables.append(table_name)
208
214
  return filtered_tables
209
215
 
210
- def get(self, name: str, backend_name: str | None = None) -> Table:
216
+ def get(
217
+ self, name: str, backend_name: str | None = None, strict: bool = True
218
+ ) -> Table:
211
219
  """Get a label from the group."""
212
220
  if name not in self.list():
213
221
  raise KeyError(f"Table '{name}' not found in the group.")
@@ -220,6 +228,7 @@ class TablesContainer:
220
228
  version=table_version,
221
229
  handler=table_handler,
222
230
  backend_name=backend_name,
231
+ strict=strict,
223
232
  )
224
233
 
225
234
  def add(
@@ -227,13 +227,18 @@ class _GenericRoiTableV1(Generic[_roi_meta]):
227
227
  """List all ROIs in the table."""
228
228
  return list(self._rois.values())
229
229
 
230
- def add(self, roi: Roi | Iterable[Roi]) -> None:
231
- """Append ROIs to the current table."""
230
+ def add(self, roi: Roi | Iterable[Roi], overwrite: bool = False) -> None:
231
+ """Append ROIs to the current table.
232
+
233
+ Args:
234
+ roi: A single ROI or a list of ROIs to add to the table.
235
+ overwrite: If True, overwrite existing ROIs with the same name.
236
+ """
232
237
  if isinstance(roi, Roi):
233
238
  roi = [roi]
234
239
 
235
240
  for _roi in roi:
236
- if _roi.name in self._rois:
241
+ if not overwrite and _roi.name in self._rois:
237
242
  raise NgioValueError(f"ROI {_roi.name} already exists in the table.")
238
243
  self._rois[_roi.name] = _roi
239
244
 
@@ -61,6 +61,8 @@ def test_create_and_edit_plate(tmp_path: Path):
61
61
  test_plate.add_image(row="B", column="03", image_path="0", acquisition_id=0)
62
62
  test_plate.add_image(row="B", column="03", image_path="1", acquisition_id=0)
63
63
 
64
+ assert test_plate.meta.plate.name == "test_plate"
65
+
64
66
  with pytest.raises(NgioValueError):
65
67
  test_plate.add_image(row="B", column="03", image_path="1", acquisition_id=1)
66
68
 
@@ -106,6 +108,7 @@ def test_add_well(tmp_path: Path):
106
108
  assert test_plate.rows == ["B"]
107
109
  assert test_plate.acquisition_ids == []
108
110
  assert test_plate.wells_paths() == ["B/03"]
111
+ assert test_plate.meta.plate.name == "test_plate"
109
112
 
110
113
  test_plate.add_column("04")
111
114
  test_plate.add_row("C")
@@ -118,6 +118,17 @@ def test_normalize_pandas_df(in_df, out_df, index_key, index_type, reset_index):
118
118
  )
119
119
 
120
120
 
121
+ def test_normalize_pandas_df_index_none():
122
+ """Test the normalization of a pandas DataFrame."""
123
+ df = normalize_pandas_df(
124
+ sample_pandas_df_no_index(),
125
+ index_key="new_index_name",
126
+ index_type="str",
127
+ reset_index=False,
128
+ )
129
+ assert df.index.name == "new_index_name"
130
+
131
+
121
132
  def test_fail_normalize_pandas_df():
122
133
  """Test the normalization of a pandas DataFrame."""
123
134
  with pytest.raises(NgioTableValidationError):
@@ -130,7 +141,7 @@ def test_fail_normalize_pandas_df():
130
141
 
131
142
  with pytest.raises(NgioTableValidationError):
132
143
  normalize_pandas_df(
133
- sample_pandas_df_no_index(),
144
+ sample_pandas_df_str_index(),
134
145
  index_key="not_exist",
135
146
  index_type="str",
136
147
  reset_index=False,
@@ -1,10 +1,13 @@
1
1
  from pathlib import Path
2
2
 
3
+ import pandas as pd
3
4
  import pytest
4
5
 
6
+ from ngio.tables import RoiTable
7
+ from ngio.tables.backends._anndata_v1 import AnnDataBackend
5
8
  from ngio.tables.tables_container import open_table, write_table
6
- from ngio.tables.v1._roi_table import Roi, RoiTableV1
7
- from ngio.utils import NgioValueError
9
+ from ngio.tables.v1._roi_table import Roi, RoiTableV1, RoiTableV1Meta
10
+ from ngio.utils import NgioValueError, ZarrGroupHandler
8
11
 
9
12
 
10
13
  def test_roi_table_v1(tmp_path: Path):
@@ -38,6 +41,7 @@ def test_roi_table_v1(tmp_path: Path):
38
41
  )
39
42
 
40
43
  with pytest.raises(NgioValueError):
44
+ # ROI name already exists
41
45
  table.add(
42
46
  roi=Roi(
43
47
  name="roi2",
@@ -51,6 +55,20 @@ def test_roi_table_v1(tmp_path: Path):
51
55
  )
52
56
  )
53
57
 
58
+ table.add(
59
+ roi=Roi(
60
+ name="roi2",
61
+ x=0.0,
62
+ y=0.0,
63
+ z=0.0,
64
+ x_length=1.0,
65
+ y_length=1.0,
66
+ z_length=1.0,
67
+ unit="micrometer", # type: ignore
68
+ ),
69
+ overwrite=True,
70
+ )
71
+
54
72
  write_table(store=tmp_path / "roi_table.zarr", table=table, backend="anndata_v1")
55
73
 
56
74
  loaded_table = open_table(store=tmp_path / "roi_table.zarr")
@@ -66,3 +84,32 @@ def test_roi_table_v1(tmp_path: Path):
66
84
  assert loaded_table._meta.backend == "anndata_v1"
67
85
  assert loaded_table._meta.fractal_table_version == loaded_table.version()
68
86
  assert loaded_table._meta.type == loaded_table.type()
87
+
88
+
89
+ def test_roi_no_index(tmp_path: Path):
90
+ """ngio needs to support reading a table without an index. for legacy reasons"""
91
+ handler = ZarrGroupHandler(tmp_path / "roi_table.zarr")
92
+ backend = AnnDataBackend(
93
+ group_handler=handler,
94
+ )
95
+
96
+ roi_table = pd.DataFrame(
97
+ {
98
+ "x_micrometer": [0.0, 1.0],
99
+ "y_micrometer": [0.0, 1.0],
100
+ "z_micrometer": [0.0, 1.0],
101
+ "len_x_micrometer": [1.0, 1.0],
102
+ "len_y_micrometer": [1.0, 1.0],
103
+ "len_z_micrometer": [1.0, 1.0],
104
+ }
105
+ )
106
+ roi_table.index = pd.Index(["roi_1", "roi_2"])
107
+
108
+ backend.write(
109
+ roi_table,
110
+ metadata=RoiTableV1Meta().model_dump(exclude_none=True),
111
+ )
112
+
113
+ roi_table = RoiTable._from_handler(handler=handler)
114
+ assert isinstance(roi_table, RoiTable)
115
+ assert len(roi_table.rois()) == 2
ngio-0.2.3/index.md DELETED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes