ome-arrow 0.0.5__tar.gz → 0.0.6__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 (347) hide show
  1. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/dependabot.yml +8 -0
  2. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.pre-commit-config.yaml +3 -3
  3. {ome_arrow-0.0.5/src/ome_arrow.egg-info → ome_arrow-0.0.6}/PKG-INFO +1 -1
  4. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/_version.py +3 -3
  5. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/core.py +32 -3
  6. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/export.py +245 -9
  7. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/ingest.py +237 -37
  8. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/meta.py +41 -0
  9. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/transform.py +34 -0
  10. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/view.py +3 -22
  11. {ome_arrow-0.0.5 → ome_arrow-0.0.6/src/ome_arrow.egg-info}/PKG-INFO +1 -1
  12. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/SOURCES.txt +1 -0
  13. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/conftest.py +34 -0
  14. ome_arrow-0.0.6/tests/test_chunks.py +83 -0
  15. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_core.py +12 -0
  16. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/uv.lock +708 -540
  17. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
  18. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/release-drafter.yml +0 -0
  20. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/draft-release.yml +0 -0
  21. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/publish-docs.yml +0 -0
  22. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/publish-pypi.yml +0 -0
  23. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/run-tests.yml +0 -0
  24. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.gitignore +0 -0
  25. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.python-version +0 -0
  26. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CITATION.cff +0 -0
  27. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CODE_OF_CONDUCT.md +0 -0
  28. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CONTRIBUTING.md +0 -0
  29. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/LICENSE +0 -0
  30. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/README.md +0 -0
  31. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/logo.png +0 -0
  32. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/references_to_files.png +0 -0
  33. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/various_ome_arrow_schema.png +0 -0
  34. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/conf.py +0 -0
  35. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/examples/learning_to_fly_with_ome-arrow.ipynb +0 -0
  36. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/examples/learning_to_fly_with_ome-arrow.py +0 -0
  37. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/index.md +0 -0
  38. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/python-api.md +0 -0
  39. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/pyproject.toml +0 -0
  40. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/setup.cfg +0 -0
  41. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/__init__.py +0 -0
  42. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/utils.py +0 -0
  43. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/dependency_links.txt +0 -0
  44. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/requires.txt +0 -0
  45. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/top_level.txt +0 -0
  46. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/JUMP-BR00117006/BR00117006.ome.parquet +0 -0
  47. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d0.tif +0 -0
  48. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d1.tif +0 -0
  49. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d2.tif +0 -0
  50. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/0/0/0 +0 -0
  51. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/1/0/0 +0 -0
  52. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/10/0/0 +0 -0
  53. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/11/0/0 +0 -0
  54. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/12/0/0 +0 -0
  55. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/13/0/0 +0 -0
  56. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/14/0/0 +0 -0
  57. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/15/0/0 +0 -0
  58. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/16/0/0 +0 -0
  59. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/17/0/0 +0 -0
  60. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/18/0/0 +0 -0
  61. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/19/0/0 +0 -0
  62. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/2/0/0 +0 -0
  63. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/20/0/0 +0 -0
  64. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/21/0/0 +0 -0
  65. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/22/0/0 +0 -0
  66. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/23/0/0 +0 -0
  67. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/3/0/0 +0 -0
  68. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/4/0/0 +0 -0
  69. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/5/0/0 +0 -0
  70. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/6/0/0 +0 -0
  71. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/7/0/0 +0 -0
  72. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/8/0/0 +0 -0
  73. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/9/0/0 +0 -0
  74. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/0/0/0 +0 -0
  75. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/1/0/0 +0 -0
  76. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/10/0/0 +0 -0
  77. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/11/0/0 +0 -0
  78. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/12/0/0 +0 -0
  79. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/13/0/0 +0 -0
  80. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/14/0/0 +0 -0
  81. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/15/0/0 +0 -0
  82. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/16/0/0 +0 -0
  83. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/17/0/0 +0 -0
  84. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/18/0/0 +0 -0
  85. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/19/0/0 +0 -0
  86. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/2/0/0 +0 -0
  87. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/20/0/0 +0 -0
  88. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/21/0/0 +0 -0
  89. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/22/0/0 +0 -0
  90. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/23/0/0 +0 -0
  91. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/3/0/0 +0 -0
  92. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/4/0/0 +0 -0
  93. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/5/0/0 +0 -0
  94. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/6/0/0 +0 -0
  95. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/7/0/0 +0 -0
  96. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/8/0/0 +0 -0
  97. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/9/0/0 +0 -0
  98. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/zarr.json +0 -0
  99. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/0/0/0 +0 -0
  100. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/1/0/0 +0 -0
  101. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/10/0/0 +0 -0
  102. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/11/0/0 +0 -0
  103. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/12/0/0 +0 -0
  104. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/13/0/0 +0 -0
  105. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/14/0/0 +0 -0
  106. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/15/0/0 +0 -0
  107. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/16/0/0 +0 -0
  108. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/17/0/0 +0 -0
  109. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/18/0/0 +0 -0
  110. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/19/0/0 +0 -0
  111. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/2/0/0 +0 -0
  112. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/20/0/0 +0 -0
  113. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/21/0/0 +0 -0
  114. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/22/0/0 +0 -0
  115. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/23/0/0 +0 -0
  116. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/3/0/0 +0 -0
  117. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/4/0/0 +0 -0
  118. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/5/0/0 +0 -0
  119. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/6/0/0 +0 -0
  120. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/7/0/0 +0 -0
  121. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/8/0/0 +0 -0
  122. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/9/0/0 +0 -0
  123. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/0/0/0 +0 -0
  124. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/1/0/0 +0 -0
  125. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/10/0/0 +0 -0
  126. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/11/0/0 +0 -0
  127. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/12/0/0 +0 -0
  128. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/13/0/0 +0 -0
  129. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/14/0/0 +0 -0
  130. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/15/0/0 +0 -0
  131. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/16/0/0 +0 -0
  132. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/17/0/0 +0 -0
  133. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/18/0/0 +0 -0
  134. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/19/0/0 +0 -0
  135. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/2/0/0 +0 -0
  136. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/20/0/0 +0 -0
  137. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/21/0/0 +0 -0
  138. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/22/0/0 +0 -0
  139. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/23/0/0 +0 -0
  140. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/3/0/0 +0 -0
  141. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/4/0/0 +0 -0
  142. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/5/0/0 +0 -0
  143. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/6/0/0 +0 -0
  144. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/7/0/0 +0 -0
  145. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/8/0/0 +0 -0
  146. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/9/0/0 +0 -0
  147. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/zarr.json +0 -0
  148. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/0/0/0 +0 -0
  149. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/1/0/0 +0 -0
  150. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/10/0/0 +0 -0
  151. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/11/0/0 +0 -0
  152. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/12/0/0 +0 -0
  153. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/13/0/0 +0 -0
  154. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/14/0/0 +0 -0
  155. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/15/0/0 +0 -0
  156. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/16/0/0 +0 -0
  157. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/17/0/0 +0 -0
  158. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/18/0/0 +0 -0
  159. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/19/0/0 +0 -0
  160. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/2/0/0 +0 -0
  161. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/20/0/0 +0 -0
  162. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/21/0/0 +0 -0
  163. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/22/0/0 +0 -0
  164. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/23/0/0 +0 -0
  165. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/3/0/0 +0 -0
  166. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/4/0/0 +0 -0
  167. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/5/0/0 +0 -0
  168. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/6/0/0 +0 -0
  169. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/7/0/0 +0 -0
  170. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/8/0/0 +0 -0
  171. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/9/0/0 +0 -0
  172. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/0/0/0 +0 -0
  173. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/1/0/0 +0 -0
  174. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/10/0/0 +0 -0
  175. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/11/0/0 +0 -0
  176. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/12/0/0 +0 -0
  177. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/13/0/0 +0 -0
  178. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/14/0/0 +0 -0
  179. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/15/0/0 +0 -0
  180. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/16/0/0 +0 -0
  181. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/17/0/0 +0 -0
  182. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/18/0/0 +0 -0
  183. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/19/0/0 +0 -0
  184. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/2/0/0 +0 -0
  185. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/20/0/0 +0 -0
  186. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/21/0/0 +0 -0
  187. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/22/0/0 +0 -0
  188. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/23/0/0 +0 -0
  189. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/3/0/0 +0 -0
  190. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/4/0/0 +0 -0
  191. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/5/0/0 +0 -0
  192. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/6/0/0 +0 -0
  193. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/7/0/0 +0 -0
  194. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/8/0/0 +0 -0
  195. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/9/0/0 +0 -0
  196. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/zarr.json +0 -0
  197. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/6001240_labels.zarr/ro-crate-metadata.json +0 -0
  198. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/10/0/0 +0 -0
  199. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/11/0/0 +0 -0
  200. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/12/0/0 +0 -0
  201. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/13/0/0 +0 -0
  202. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/14/0/0 +0 -0
  203. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/15/0/0 +0 -0
  204. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/16/0/0 +0 -0
  205. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/17/0/0 +0 -0
  206. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/18/0/0 +0 -0
  207. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/19/0/0 +0 -0
  208. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/2/0/0 +0 -0
  209. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/20/0/0 +0 -0
  210. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/21/0/0 +0 -0
  211. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/22/0/0 +0 -0
  212. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/23/0/0 +0 -0
  213. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/3/0/0 +0 -0
  214. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/4/0/0 +0 -0
  215. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/5/0/0 +0 -0
  216. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/6/0/0 +0 -0
  217. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/7/0/0 +0 -0
  218. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/8/0/0 +0 -0
  219. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/c/0/9/0/0 +0 -0
  220. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/zarr.json +0 -0
  221. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/10/0/0 +0 -0
  222. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/11/0/0 +0 -0
  223. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/12/0/0 +0 -0
  224. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/13/0/0 +0 -0
  225. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/14/0/0 +0 -0
  226. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/15/0/0 +0 -0
  227. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/16/0/0 +0 -0
  228. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/17/0/0 +0 -0
  229. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/18/0/0 +0 -0
  230. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/19/0/0 +0 -0
  231. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/2/0/0 +0 -0
  232. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/20/0/0 +0 -0
  233. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/21/0/0 +0 -0
  234. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/22/0/0 +0 -0
  235. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/23/0/0 +0 -0
  236. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/3/0/0 +0 -0
  237. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/4/0/0 +0 -0
  238. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/5/0/0 +0 -0
  239. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/6/0/0 +0 -0
  240. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/7/0/0 +0 -0
  241. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/8/0/0 +0 -0
  242. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/c/0/9/0/0 +0 -0
  243. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/zarr.json +0 -0
  244. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/10/0/0 +0 -0
  245. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/11/0/0 +0 -0
  246. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/12/0/0 +0 -0
  247. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/13/0/0 +0 -0
  248. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/14/0/0 +0 -0
  249. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/15/0/0 +0 -0
  250. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/16/0/0 +0 -0
  251. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/17/0/0 +0 -0
  252. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/18/0/0 +0 -0
  253. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/19/0/0 +0 -0
  254. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/2/0/0 +0 -0
  255. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/20/0/0 +0 -0
  256. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/21/0/0 +0 -0
  257. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/22/0/0 +0 -0
  258. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/23/0/0 +0 -0
  259. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/3/0/0 +0 -0
  260. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/4/0/0 +0 -0
  261. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/5/0/0 +0 -0
  262. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/6/0/0 +0 -0
  263. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/7/0/0 +0 -0
  264. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/8/0/0 +0 -0
  265. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/c/0/9/0/0 +0 -0
  266. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/zarr.json +0 -0
  267. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/10/0/0 +0 -0
  268. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/11/0/0 +0 -0
  269. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/12/0/0 +0 -0
  270. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/13/0/0 +0 -0
  271. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/14/0/0 +0 -0
  272. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/15/0/0 +0 -0
  273. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/16/0/0 +0 -0
  274. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/17/0/0 +0 -0
  275. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/18/0/0 +0 -0
  276. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/19/0/0 +0 -0
  277. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/2/0/0 +0 -0
  278. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/20/0/0 +0 -0
  279. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/21/0/0 +0 -0
  280. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/22/0/0 +0 -0
  281. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/23/0/0 +0 -0
  282. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/3/0/0 +0 -0
  283. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/4/0/0 +0 -0
  284. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/5/0/0 +0 -0
  285. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/6/0/0 +0 -0
  286. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/7/0/0 +0 -0
  287. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/8/0/0 +0 -0
  288. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/c/0/9/0/0 +0 -0
  289. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/zarr.json +0 -0
  290. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/zarr.json +0 -0
  291. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/zarr.json +0 -0
  292. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/zarr.json +0 -0
  293. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS000.tif +0 -0
  294. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS001.tif +0 -0
  295. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS002.tif +0 -0
  296. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS003.tif +0 -0
  297. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS004.tif +0 -0
  298. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS005.tif +0 -0
  299. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS006.tif +0 -0
  300. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS007.tif +0 -0
  301. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS008.tif +0 -0
  302. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS009.tif +0 -0
  303. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS010.tif +0 -0
  304. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS011.tif +0 -0
  305. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS012.tif +0 -0
  306. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS013.tif +0 -0
  307. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS014.tif +0 -0
  308. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS015.tif +0 -0
  309. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS016.tif +0 -0
  310. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS017.tif +0 -0
  311. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS018.tif +0 -0
  312. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS019.tif +0 -0
  313. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS020.tif +0 -0
  314. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS021.tif +0 -0
  315. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS000.tif +0 -0
  316. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS001.tif +0 -0
  317. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS002.tif +0 -0
  318. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS003.tif +0 -0
  319. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS004.tif +0 -0
  320. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS005.tif +0 -0
  321. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS006.tif +0 -0
  322. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS007.tif +0 -0
  323. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS008.tif +0 -0
  324. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS009.tif +0 -0
  325. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS010.tif +0 -0
  326. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS011.tif +0 -0
  327. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS012.tif +0 -0
  328. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS013.tif +0 -0
  329. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS014.tif +0 -0
  330. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS015.tif +0 -0
  331. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS016.tif +0 -0
  332. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS017.tif +0 -0
  333. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS018.tif +0 -0
  334. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS019.tif +0 -0
  335. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS020.tif +0 -0
  336. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS021.tif +0 -0
  337. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/4D-series.ome.tiff +0 -0
  338. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-4D-series.ome.tiff +0 -0
  339. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-time-series.ome.tiff +0 -0
  340. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-z-series.ome.tiff +0 -0
  341. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel.ome.tiff +0 -0
  342. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/single-channel.ome.tiff +0 -0
  343. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/time-series.ome.tif +0 -0
  344. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/z-series.ome.tiff +0 -0
  345. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_scaling.py +0 -0
  346. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_utils.py +0 -0
  347. {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_view.py +0 -0
@@ -14,6 +14,10 @@ updates:
14
14
  schedule:
15
15
  # Check for updates to GitHub Actions every week
16
16
  interval: "weekly"
17
+ groups:
18
+ github-actions:
19
+ patterns:
20
+ - "*"
17
21
 
18
22
  # Perform checks and updates for python uv environment.
19
23
  # This depends on changes to dependabot via:
@@ -25,3 +29,7 @@ updates:
25
29
  schedule:
26
30
  # Check for updates to uv environment files every week
27
31
  interval: "weekly"
32
+ groups:
33
+ uv:
34
+ patterns:
35
+ - "*"
@@ -9,7 +9,7 @@ repos:
9
9
  - id: check-yaml
10
10
  - id: detect-private-key
11
11
  - repo: https://github.com/tox-dev/pyproject-fmt
12
- rev: "v2.11.1"
12
+ rev: "v2.12.1"
13
13
  hooks:
14
14
  - id: pyproject-fmt
15
15
  - repo: https://github.com/citation-file-format/cffconvert
@@ -34,12 +34,12 @@ repos:
34
34
  additional_dependencies:
35
35
  - mdformat-gfm
36
36
  - repo: https://github.com/adrienverge/yamllint
37
- rev: v1.37.1
37
+ rev: v1.38.0
38
38
  hooks:
39
39
  - id: yamllint
40
40
  exclude: pre-commit-config.yaml
41
41
  - repo: https://github.com/astral-sh/ruff-pre-commit
42
- rev: "v0.14.10"
42
+ rev: "v0.15.0"
43
43
  hooks:
44
44
  - id: ruff-format
45
45
  - id: ruff-check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ome-arrow
3
- Version: 0.0.5
3
+ Version: 0.0.6
4
4
  Summary: Using OME specifications with Apache Arrow for fast, queryable, and language agnostic bioimage data.
5
5
  Author: Dave Bunten
6
6
  Classifier: Programming Language :: Python :: 3 :: Only
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.5'
32
- __version_tuple__ = version_tuple = (0, 0, 5)
31
+ __version__ = version = '0.0.6'
32
+ __version_tuple__ = version_tuple = (0, 0, 6)
33
33
 
34
- __commit_id__ = commit_id = 'gcffe1e1a2'
34
+ __commit_id__ = commit_id = 'g8a6803ece'
@@ -59,6 +59,7 @@ class OMEArrow:
59
59
  tcz: Tuple[int, int, int] = (0, 0, 0),
60
60
  column_name: str = "ome_arrow",
61
61
  row_index: int = 0,
62
+ image_type: str | None = None,
62
63
  ) -> None:
63
64
  """
64
65
  Construct an OMEArrow from:
@@ -71,6 +72,7 @@ class OMEArrow:
71
72
  with from_numpy defaults)
72
73
  - a dict already matching the OME-Arrow schema
73
74
  - a pa.StructScalar already typed to OME_ARROW_STRUCT
75
+ - optionally override/set image_type metadata on ingest
74
76
  """
75
77
 
76
78
  # set the tcz for viewing
@@ -83,6 +85,7 @@ class OMEArrow:
83
85
  default_dim_for_unspecified="C",
84
86
  map_series_to="T",
85
87
  clamp_to_uint16=True,
88
+ image_type=image_type,
86
89
  )
87
90
 
88
91
  # --- 2) String path/URL: OME-Zarr / OME-Parquet / OME-TIFF ---------------
@@ -98,6 +101,8 @@ class OMEArrow:
98
101
  or (path.exists() and path.is_dir() and path.suffix.lower() == ".zarr")
99
102
  ):
100
103
  self.data = from_ome_zarr(s)
104
+ if image_type is not None:
105
+ self.data = self._wrap_with_image_type(self.data, image_type)
101
106
 
102
107
  # OME-Parquet
103
108
  elif s.lower().endswith((".parquet", ".pq")) or path.suffix.lower() in {
@@ -107,18 +112,24 @@ class OMEArrow:
107
112
  self.data = from_ome_parquet(
108
113
  s, column_name=column_name, row_index=row_index
109
114
  )
115
+ if image_type is not None:
116
+ self.data = self._wrap_with_image_type(self.data, image_type)
110
117
 
111
118
  # Vortex
112
119
  elif s.lower().endswith(".vortex") or path.suffix.lower() == ".vortex":
113
120
  self.data = from_ome_vortex(
114
121
  s, column_name=column_name, row_index=row_index
115
122
  )
123
+ if image_type is not None:
124
+ self.data = self._wrap_with_image_type(self.data, image_type)
116
125
 
117
126
  # TIFF
118
127
  elif path.suffix.lower() in {".tif", ".tiff"} or s.lower().endswith(
119
128
  (".tif", ".tiff")
120
129
  ):
121
130
  self.data = from_tiff(s)
131
+ if image_type is not None:
132
+ self.data = self._wrap_with_image_type(self.data, image_type)
122
133
 
123
134
  elif path.exists() and path.is_dir():
124
135
  raise ValueError(
@@ -140,15 +151,20 @@ class OMEArrow:
140
151
  # Uses from_numpy defaults: dim_order="TCZYX", clamp_to_uint16=True, etc.
141
152
  # If the array is YX/ZYX/CYX/etc.,
142
153
  # from_numpy will expand/reorder accordingly.
143
- self.data = from_numpy(data)
154
+ self.data = from_numpy(data, image_type=image_type)
144
155
 
145
156
  # --- 4) Already-typed Arrow scalar ---------------------------------------
146
157
  elif isinstance(data, pa.StructScalar):
147
158
  self.data = data
159
+ if image_type is not None:
160
+ self.data = self._wrap_with_image_type(self.data, image_type)
148
161
 
149
162
  # --- 5) Plain dict matching the schema -----------------------------------
150
163
  elif isinstance(data, dict):
151
- self.data = pa.scalar(data, type=OME_ARROW_STRUCT)
164
+ record = {f.name: data.get(f.name) for f in OME_ARROW_STRUCT}
165
+ self.data = pa.scalar(record, type=OME_ARROW_STRUCT)
166
+ if image_type is not None:
167
+ self.data = self._wrap_with_image_type(self.data, image_type)
152
168
 
153
169
  # --- otherwise ------------------------------------------------------------
154
170
  else:
@@ -156,6 +172,18 @@ class OMEArrow:
156
172
  "input data must be str, dict, pa.StructScalar, or numpy.ndarray"
157
173
  )
158
174
 
175
+ @staticmethod
176
+ def _wrap_with_image_type(
177
+ data: pa.StructScalar, image_type: str
178
+ ) -> pa.StructScalar:
179
+ return pa.scalar(
180
+ {
181
+ **data.as_py(),
182
+ "image_type": str(image_type),
183
+ },
184
+ type=OME_ARROW_STRUCT,
185
+ )
186
+
159
187
  def export( # noqa: PLR0911
160
188
  self,
161
189
  how: str = "numpy",
@@ -212,7 +240,8 @@ class OMEArrow:
212
240
  compression / compression_level / tile:
213
241
  OME-TIFF options (passed through to tifffile via BioIO).
214
242
  chunks / zarr_compressor / zarr_level :
215
- OME-Zarr options (chunk shape, compressor hint, level).
243
+ OME-Zarr options (chunk shape, compressor hint, level). If chunks is
244
+ None, a TCZYX default is chosen (1,1,<=4,<=512,<=512).
216
245
  use_channel_colors:
217
246
  Try to embed per-channel display colors when safe; otherwise omitted.
218
247
  parquet_*:
@@ -21,7 +21,8 @@ def to_numpy(
21
21
  Convert an OME-Arrow record into a NumPy array shaped (T,C,Z,Y,X).
22
22
 
23
23
  The OME-Arrow "planes" are flattened YX slices indexed by (z, t, c).
24
- This function reconstitutes them into a dense TCZYX ndarray.
24
+ When chunks are present, this function reconstitutes the dense TCZYX array
25
+ from chunked pixels instead of planes.
25
26
 
26
27
  Args:
27
28
  data:
@@ -58,7 +59,7 @@ def to_numpy(
58
59
  if sx <= 0 or sy <= 0 or sz <= 0 or sc <= 0 or st <= 0:
59
60
  raise ValueError("All size_* fields must be positive integers.")
60
61
 
61
- expected_len = sx * sy
62
+ expected_plane_len = sx * sy
62
63
 
63
64
  # Prepare target array (T,C,Z,Y,X), zero-filled by default.
64
65
  out = np.zeros((st, sc, sz, sy, sx), dtype=dtype)
@@ -78,6 +79,70 @@ def to_numpy(
78
79
  a = np.clip(a, lo, hi)
79
80
  return a.astype(dtype, copy=False)
80
81
 
82
+ chunks = data.get("chunks") or []
83
+ if chunks:
84
+ chunk_grid = data.get("chunk_grid") or {}
85
+ chunk_order = str(chunk_grid.get("chunk_order") or "ZYX").upper()
86
+ if chunk_order != "ZYX":
87
+ raise ValueError("Only chunk_order='ZYX' is supported for now.")
88
+
89
+ for i, ch in enumerate(chunks):
90
+ # Chunk coordinates include time/channel plus spatial indices.
91
+ t = int(ch["t"])
92
+ c = int(ch["c"])
93
+ z = int(ch["z"])
94
+ y = int(ch["y"])
95
+ x = int(ch["x"])
96
+ # Chunk shape is only spatial (Z, Y, X).
97
+ shape_z = int(ch["shape_z"])
98
+ shape_y = int(ch["shape_y"])
99
+ shape_x = int(ch["shape_x"])
100
+
101
+ # Validate chunk indices and extents within the full 5D array.
102
+ if not (0 <= t < st and 0 <= c < sc and 0 <= z < sz):
103
+ raise ValueError(
104
+ f"chunks[{i}] index out of range: (t,c,z)=({t},{c},{z})"
105
+ )
106
+ if y < 0 or x < 0 or shape_z <= 0 or shape_y <= 0 or shape_x <= 0:
107
+ raise ValueError(f"chunks[{i}] has invalid shape or origin.")
108
+ if z + shape_z > sz:
109
+ raise ValueError(
110
+ f"chunks[{i}] extent out of range: z+shape_z={z + shape_z} "
111
+ f"> sz={sz}"
112
+ )
113
+ if y + shape_y > sy:
114
+ raise ValueError(
115
+ f"chunks[{i}] extent out of range: y+shape_y={y + shape_y} "
116
+ f"> sy={sy}"
117
+ )
118
+ if x + shape_x > sx:
119
+ raise ValueError(
120
+ f"chunks[{i}] extent out of range: x+shape_x={x + shape_x} "
121
+ f"> sx={sx}"
122
+ )
123
+
124
+ pix = ch["pixels"]
125
+ try:
126
+ n = len(pix)
127
+ except Exception as e:
128
+ raise ValueError(f"chunks[{i}].pixels is not a sequence") from e
129
+
130
+ expected_len = shape_z * shape_y * shape_x
131
+ if n != expected_len:
132
+ if strict:
133
+ raise ValueError(
134
+ f"chunks[{i}].pixels length {n} != expected {expected_len}"
135
+ )
136
+ if n > expected_len:
137
+ pix = pix[:expected_len]
138
+ else:
139
+ pix = list(pix) + [0] * (expected_len - n)
140
+
141
+ arr3d = np.asarray(pix).reshape(shape_z, shape_y, shape_x)
142
+ arr3d = _cast_plane(arr3d)
143
+ out[t, c, z : z + shape_z, y : y + shape_y, x : x + shape_x] = arr3d
144
+ return out
145
+
81
146
  # Fill planes.
82
147
  for i, p in enumerate(data.get("planes", [])):
83
148
  z = int(p["z"])
@@ -94,16 +159,17 @@ def to_numpy(
94
159
  except Exception as e:
95
160
  raise ValueError(f"planes[{i}].pixels is not a sequence") from e
96
161
 
97
- if n != expected_len:
162
+ if n != expected_plane_len:
98
163
  if strict:
99
164
  raise ValueError(
100
- f"planes[{i}].pixels length {n} != size_x*size_y {expected_len}"
165
+ f"planes[{i}].pixels length {n} != size_x*size_y "
166
+ f"{expected_plane_len}"
101
167
  )
102
168
  # Lenient mode: fix length by truncation or zero-pad.
103
- if n > expected_len:
104
- pix = pix[:expected_len]
169
+ if n > expected_plane_len:
170
+ pix = pix[:expected_plane_len]
105
171
  else:
106
- pix = list(pix) + [0] * (expected_len - n)
172
+ pix = list(pix) + [0] * (expected_plane_len - n)
107
173
 
108
174
  # Reshape to (Y,X) and cast.
109
175
  arr2d = np.asarray(pix).reshape(sy, sx)
@@ -113,6 +179,162 @@ def to_numpy(
113
179
  return out
114
180
 
115
181
 
182
+ # Note: x/y are implicit because this returns the full XY plane for (t, c, z).
183
+ def plane_from_chunks(
184
+ data: Dict[str, Any] | pa.StructScalar,
185
+ *,
186
+ t: int,
187
+ c: int,
188
+ z: int,
189
+ dtype: np.dtype = np.uint16,
190
+ strict: bool = True,
191
+ clamp: bool = False,
192
+ ) -> np.ndarray:
193
+ """Extract a single (t, c, z) plane using chunked pixels when available.
194
+
195
+ Args:
196
+ data: OME-Arrow data as a Python dict or a `pa.StructScalar`.
197
+ t: Time index for the plane.
198
+ c: Channel index for the plane.
199
+ z: Z index for the plane.
200
+ dtype: Output dtype (default: np.uint16).
201
+ strict: When True, raise if chunk pixels are malformed.
202
+ clamp: If True, clamp values to the valid range of the target dtype.
203
+
204
+ Returns:
205
+ np.ndarray: 2D array with shape (Y, X).
206
+
207
+ Raises:
208
+ KeyError: If required OME-Arrow fields are missing.
209
+ ValueError: If indices are out of range or pixels are malformed.
210
+ """
211
+ # The plane spans full X/Y for the given (t, c, z); x/y are implicit.
212
+ if isinstance(data, pa.StructScalar):
213
+ data = data.as_py()
214
+
215
+ # Read pixel metadata and validate requested plane indices.
216
+ pm = data["pixels_meta"]
217
+ sx, sy = int(pm["size_x"]), int(pm["size_y"])
218
+ sz, sc, st = int(pm["size_z"]), int(pm["size_c"]), int(pm["size_t"])
219
+ if not (0 <= t < st and 0 <= c < sc and 0 <= z < sz):
220
+ raise ValueError(f"Requested plane (t={t}, c={c}, z={z}) out of range.")
221
+
222
+ # Prepare dtype conversion (optional clamping for integer outputs).
223
+ if np.issubdtype(dtype, np.integer):
224
+ info = np.iinfo(dtype)
225
+ lo, hi = info.min, info.max
226
+ elif np.issubdtype(dtype, np.floating):
227
+ lo, hi = -np.inf, np.inf
228
+ else:
229
+ lo, hi = -np.inf, np.inf
230
+
231
+ def _cast_plane(a: np.ndarray) -> np.ndarray:
232
+ if clamp:
233
+ a = np.clip(a, lo, hi)
234
+ return a.astype(dtype, copy=False)
235
+
236
+ # Prefer chunked pixels if present, assembling the requested Z plane.
237
+ chunks = data.get("chunks") or []
238
+ if chunks:
239
+ chunk_grid = data.get("chunk_grid") or {}
240
+ chunk_order = str(chunk_grid.get("chunk_order") or "ZYX").upper()
241
+ if chunk_order != "ZYX":
242
+ raise ValueError("Only chunk_order='ZYX' is supported for now.")
243
+
244
+ # Allocate an empty XY plane; fill in tiles from matching chunks.
245
+ plane = np.zeros((sy, sx), dtype=dtype)
246
+ any_chunk_matched = False
247
+ for i, ch in enumerate(chunks):
248
+ # Skip chunks from other (t, c) positions.
249
+ if int(ch["t"]) != t or int(ch["c"]) != c:
250
+ continue
251
+ z0 = int(ch["z"])
252
+ szc = int(ch["shape_z"])
253
+ # Skip chunks whose Z slab does not cover the target plane.
254
+ if not (z0 <= z < z0 + szc):
255
+ continue
256
+ y0 = int(ch["y"])
257
+ x0 = int(ch["x"])
258
+ syc = int(ch["shape_y"])
259
+ sxc = int(ch["shape_x"])
260
+ # Validate chunk bounds (strict mode can fail fast).
261
+ if z0 < 0 or y0 < 0 or x0 < 0:
262
+ msg = f"chunks[{i}] has negative origin: (z,y,x)=({z0},{y0},{x0})"
263
+ if strict:
264
+ raise ValueError(msg)
265
+ continue
266
+ if z0 + szc > sz:
267
+ msg = f"chunks[{i}] extent out of range: z+shape_z={z0 + szc} > sz={sz}"
268
+ if strict:
269
+ raise ValueError(msg)
270
+ continue
271
+ if y0 + syc > sy:
272
+ msg = f"chunks[{i}] extent out of range: y+shape_y={y0 + syc} > sy={sy}"
273
+ if strict:
274
+ raise ValueError(msg)
275
+ continue
276
+ if x0 + sxc > sx:
277
+ msg = f"chunks[{i}] extent out of range: x+shape_x={x0 + sxc} > sx={sx}"
278
+ if strict:
279
+ raise ValueError(msg)
280
+ continue
281
+ pix = ch["pixels"]
282
+ try:
283
+ n = len(pix)
284
+ except Exception as e:
285
+ raise ValueError(f"chunks[{i}].pixels is not a sequence") from e
286
+ expected_len = szc * syc * sxc
287
+ if n != expected_len:
288
+ if strict:
289
+ raise ValueError(
290
+ f"chunks[{i}].pixels length {n} != expected {expected_len}"
291
+ )
292
+ # Lenient mode: truncate or zero-pad to match the expected size.
293
+ if n > expected_len:
294
+ pix = pix[:expected_len]
295
+ else:
296
+ pix = list(pix) + [0] * (expected_len - n)
297
+
298
+ # Convert to a Z/Y/X slab and copy the requested Z slice into the plane.
299
+ slab = np.asarray(pix).reshape(szc, syc, sxc)
300
+ slab = _cast_plane(slab)
301
+ zi = z - z0
302
+ plane[y0 : y0 + syc, x0 : x0 + sxc] = slab[zi]
303
+ any_chunk_matched = True
304
+
305
+ if any_chunk_matched:
306
+ return plane
307
+
308
+ # Fallback to planes list if chunks are absent.
309
+ target = next(
310
+ (
311
+ p
312
+ for p in data.get("planes", [])
313
+ if int(p["t"]) == t and int(p["c"]) == c and int(p["z"]) == z
314
+ ),
315
+ None,
316
+ )
317
+ if target is None:
318
+ raise ValueError(f"plane (t={t}, c={c}, z={z}) not found")
319
+
320
+ pix = target["pixels"]
321
+ try:
322
+ n = len(pix)
323
+ except Exception as e:
324
+ raise ValueError("plane pixels is not a sequence") from e
325
+ expected_len = sx * sy
326
+ if n != expected_len:
327
+ if strict:
328
+ raise ValueError(f"plane pixels length {n} != size_x*size_y {expected_len}")
329
+ if n > expected_len:
330
+ pix = pix[:expected_len]
331
+ else:
332
+ pix = list(pix) + [0] * (expected_len - n)
333
+
334
+ arr2d = np.asarray(pix).reshape(sy, sx)
335
+ return _cast_plane(arr2d)
336
+
337
+
116
338
  def to_ome_tiff(
117
339
  data: Dict[str, Any] | pa.StructScalar,
118
340
  out_path: str,
@@ -255,6 +477,7 @@ def to_ome_zarr(
255
477
  - Creates level shapes for a multiscale pyramid (if multiscale_levels>1).
256
478
  - Chooses Blosc codec compatible with zarr_format (v2 vs v3).
257
479
  - Populates axes names/types/units and physical pixel sizes from pixels_meta.
480
+ - Uses default TCZYX chunks if none are provided.
258
481
  """
259
482
  # --- local import to avoid hard deps at module import time
260
483
  # Use the class you showed
@@ -317,6 +540,15 @@ def to_ome_zarr(
317
540
  def _down(a: int, f: int) -> int:
318
541
  return max(1, a // f)
319
542
 
543
+ def _default_chunks_tcxyz(
544
+ shape: Tuple[int, int, int, int, int],
545
+ ) -> Tuple[int, int, int, int, int]:
546
+ _t, _c, z, y, x = shape
547
+ cz = min(z, 4) if z > 1 else 1
548
+ cy = min(y, 512)
549
+ cx = min(x, 512)
550
+ return (1, 1, cz, cy, cx)
551
+
320
552
  def _level_shapes_tcxyz(levels: int) -> List[Tuple[int, int, int, int, int]]:
321
553
  shapes = [(st, sc, sz, sy, sx)]
322
554
  for _ in range(levels - 1):
@@ -340,6 +572,8 @@ def to_ome_zarr(
340
572
  # 5) Chunking / shards (can be single-shape or per-level;
341
573
  # we pass single-shape if provided)
342
574
  chunk_shape: Optional[List[Tuple[int, ...]]] = None
575
+ if chunks is None:
576
+ chunks = _default_chunks_tcxyz((st, sc, sz, sy, sx))
343
577
  if chunks is not None:
344
578
  chunk_shape = [tuple(int(v) for v in chunks)] * multiscale_levels
345
579
 
@@ -393,7 +627,8 @@ def to_ome_parquet(
393
627
  record_dict = data.as_py()
394
628
  else:
395
629
  # Validate by round-tripping through a typed scalar, then back to dict.
396
- record_dict = pa.scalar(data, type=OME_ARROW_STRUCT).as_py()
630
+ record_dict = {f.name: data.get(f.name) for f in OME_ARROW_STRUCT}
631
+ record_dict = pa.scalar(record_dict, type=OME_ARROW_STRUCT).as_py()
397
632
 
398
633
  # 2) Build a single-row struct array from the dict, explicitly passing the schema
399
634
  struct_array = pa.array([record_dict], type=OME_ARROW_STRUCT) # len=1
@@ -456,7 +691,8 @@ def to_ome_vortex(
456
691
  record_dict = data.as_py()
457
692
  else:
458
693
  # Validate by round-tripping through a typed scalar, then back to dict.
459
- record_dict = pa.scalar(data, type=OME_ARROW_STRUCT).as_py()
694
+ record_dict = {f.name: data.get(f.name) for f in OME_ARROW_STRUCT}
695
+ record_dict = pa.scalar(record_dict, type=OME_ARROW_STRUCT).as_py()
460
696
 
461
697
  # 2) Build a single-row struct array from the dict, explicitly passing the schema
462
698
  struct_array = pa.array([record_dict], type=OME_ARROW_STRUCT) # len=1