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.
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/dependabot.yml +8 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.pre-commit-config.yaml +3 -3
- {ome_arrow-0.0.5/src/ome_arrow.egg-info → ome_arrow-0.0.6}/PKG-INFO +1 -1
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/_version.py +3 -3
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/core.py +32 -3
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/export.py +245 -9
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/ingest.py +237 -37
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/meta.py +41 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/transform.py +34 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/view.py +3 -22
- {ome_arrow-0.0.5 → ome_arrow-0.0.6/src/ome_arrow.egg-info}/PKG-INFO +1 -1
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/SOURCES.txt +1 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/conftest.py +34 -0
- ome_arrow-0.0.6/tests/test_chunks.py +83 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_core.py +12 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/uv.lock +708 -540
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/ISSUE_TEMPLATE/issue.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/release-drafter.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/draft-release.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/publish-docs.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/publish-pypi.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.github/workflows/run-tests.yml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.gitignore +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/.python-version +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CITATION.cff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CODE_OF_CONDUCT.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/CONTRIBUTING.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/LICENSE +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/README.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/logo.png +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/references_to_files.png +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/_static/various_ome_arrow_schema.png +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/conf.py +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/examples/learning_to_fly_with_ome-arrow.ipynb +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/examples/learning_to_fly_with_ome-arrow.py +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/index.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/docs/src/python-api.md +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/pyproject.toml +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/setup.cfg +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/__init__.py +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow/utils.py +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/dependency_links.txt +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/requires.txt +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/src/ome_arrow.egg-info/top_level.txt +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/JUMP-BR00117006/BR00117006.ome.parquet +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d0.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d1.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/examplehuman/AS_09125_050116030001_D03f00d2.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/0/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/c/1/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/0/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/0/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/c/1/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/1/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/0/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/0/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/1/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/10/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/11/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/12/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/13/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/14/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/15/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/16/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/17/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/18/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/19/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/2/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/20/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/21/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/22/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/23/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/3/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/4/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/5/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/6/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/7/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/8/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/c/1/9/0/0 +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/2/zarr.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/0/zarr.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/1/zarr.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/2/zarr.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/3/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/0/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/labels/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/idr0062A/6001240_labels.zarr/zarr.json +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS000.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS001.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS002.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS003.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS004.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS005.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS006.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS007.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS008.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS009.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS010.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS011.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS012.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS013.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS014.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS015.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS016.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS017.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS018.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS019.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS020.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C111_ZS021.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS000.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS001.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS002.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS003.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS004.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS005.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS006.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS007.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS008.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS009.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS010.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS011.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS012.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS013.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS014.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS015.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS016.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS017.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS018.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS019.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS020.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/nviz-artificial-4d-dataset/E99_C222_ZS021.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/4D-series.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-4D-series.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-time-series.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel-z-series.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/multi-channel.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/single-channel.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/time-series.ome.tif +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/data/ome-artificial-5d-datasets/z-series.ome.tiff +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_scaling.py +0 -0
- {ome_arrow-0.0.5 → ome_arrow-0.0.6}/tests/test_utils.py +0 -0
- {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.
|
|
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
|
+
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.
|
|
42
|
+
rev: "v0.15.0"
|
|
43
43
|
hooks:
|
|
44
44
|
- id: ruff-format
|
|
45
45
|
- id: ruff-check
|
|
@@ -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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
31
|
+
__version__ = version = '0.0.6'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 6)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 !=
|
|
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
|
|
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 >
|
|
104
|
-
pix = pix[:
|
|
169
|
+
if n > expected_plane_len:
|
|
170
|
+
pix = pix[:expected_plane_len]
|
|
105
171
|
else:
|
|
106
|
-
pix = list(pix) + [0] * (
|
|
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 =
|
|
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 =
|
|
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
|