ngio 0.5.0b6__tar.gz → 0.5.0b7__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.
- {ngio-0.5.0b6 → ngio-0.5.0b7}/PKG-INFO +1 -1
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_pyramid.py +129 -30
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_abstract_image.py +117 -48
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_create_synt_container.py +4 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_create_utils.py +9 -13
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_image.py +8 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_label.py +8 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_ome_zarr_container.py +16 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v04/_v04_spec.py +3 -1
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v05/_v05_spec.py +3 -1
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/images/test_create.py +40 -2
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.copier-answers.yml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.gitattributes +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/ISSUE_TEMPLATE.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/TEST_FAIL_TEMPLATE.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/dependabot.yml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/pull_request_template.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/workflows/build_docs.yml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.github/workflows/ci.yml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.gitignore +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/.pre-commit-config.yaml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/CHANGELOG.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/LICENSE +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/README.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/_typos.toml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/hcs.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/images.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/iterators.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/common.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/hcs.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/images.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/io_pipes.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/iterators.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/ngio.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/tables.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/transforms.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ngio/utils.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/ome_zarr_container.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/api/tables.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/changelog.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/code_of_conduct.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/contributing.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/0_quickstart.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/1_ome_zarr_containers.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/2_images.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/3_tables.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/4_masked_images.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/5_hcs.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/getting_started/6_iterators.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/index.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/backend.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/overview.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/condition_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/custom_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/feature_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/generic_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/masking_roi_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/table_specs/table_types/roi_table.md +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/tutorials/create_ome_zarr.ipynb +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/tutorials/feature_extraction.ipynb +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/tutorials/hcs_exploration.ipynb +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/tutorials/image_processing.ipynb +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/docs/tutorials/image_segmentation.ipynb +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/mkdocs.yml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/pyproject.toml +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_dimensions.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_masking_roi.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_roi.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_synt_images_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/common/_zoom.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_abstract_iterator.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_feature.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_image_processing.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_mappers.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_rois_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/experimental/iterators/_segmentation.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/hcs/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/hcs/_plate.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_masked_image.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/images/_table_ops.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_io_pipes.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_io_pipes_masked.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_io_pipes_roi.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_io_pipes_types.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_match_shape.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_ops_axes.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_ops_slices.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_ops_slices_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_ops_transforms.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/io_pipes/_zoom_transform.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/_meta_handlers.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_axes.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_channels.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_dataset.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v04/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v04/_custom_models.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v05/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/ome_zarr_meta/v05/_custom_models.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/resources/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/resources/resource_model.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/_abstract_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/_tables_container.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_abstract_backend.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_anndata.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_anndata_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_csv.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_json.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_parquet.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_py_arrow_backends.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_table_backends.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/backends/_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/v1/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/v1/_condition_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/v1/_feature_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/v1/_generic_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/tables/v1/_roi_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/transforms/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/transforms/_zoom.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/__init__.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/_cache.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/_datasets.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/_errors.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/_fractal_fsspec_store.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/src/ngio/utils/_zarr_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/conftest.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/create_test_data.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/0/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zarray +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/labels/label/1/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/tables/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/tables/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zattrs +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/.zgroup +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/meta/base_ome_zarr_image_meta.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/meta/base_ome_zarr_image_meta_wrong_axis_order.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/meta/base_ome_zarr_label_meta.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/meta/base_ome_zarr_well_meta.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v04/meta/ome_zarr_well_path_normalization_meta.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_c1yx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_cyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_czyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tcyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tczyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_tzyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_yx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/labels/label/0/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/labels/label/1/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/labels/label/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/labels/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/table.csv +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/tables/well_ROI_table/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/tables/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/data/v05/images/test_image_zyx.zarr/zarr.json +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/conftest.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/test_http_store.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/test_local_store.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/test_memory_store.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/test_s3_store.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/stores/utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/common/test_dimensions.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/common/test_pyramid.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/common/test_roi.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/common/test_transforms.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/hcs/test_plate.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/hcs/test_well.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/images/test_images.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/images/test_masked_images.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/images/test_omezarr_container.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/images/test_table_ops.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/io_pipes/test_axes_ops.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/io_pipes/test_slicing_ops.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/iterators/test_iterators.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/ome_zarr_meta/test_image_handler.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/ome_zarr_meta/test_unit_ngio_specs.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/ome_zarr_meta/test_unit_v04_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_backends.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_backends_utils.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_feature_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_generic_table.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_masking_roi_table_v1.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_roi_table_v1.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/tables/test_table_group.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/utils/test_download_datasets.py +0 -0
- {ngio-0.5.0b6 → ngio-0.5.0b7}/tests/unit/utils/test_zarr_utils.py +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
import math
|
|
1
3
|
from collections.abc import Callable, Mapping, Sequence
|
|
2
4
|
from typing import Any, Literal
|
|
3
5
|
|
|
@@ -195,7 +197,7 @@ ChunksLike = tuple[int, ...] | Literal["auto"]
|
|
|
195
197
|
ShardsLike = tuple[int, ...] | Literal["auto"]
|
|
196
198
|
|
|
197
199
|
|
|
198
|
-
def
|
|
200
|
+
def compute_shapes_from_scaling_factors(
|
|
199
201
|
base_shape: tuple[int, ...],
|
|
200
202
|
scaling_factors: tuple[float, ...],
|
|
201
203
|
num_levels: int,
|
|
@@ -215,7 +217,7 @@ def shapes_from_scaling_factors(
|
|
|
215
217
|
for _ in range(num_levels):
|
|
216
218
|
shapes.append(current_shape)
|
|
217
219
|
current_shape = tuple(
|
|
218
|
-
max(1,
|
|
220
|
+
max(1, math.floor(s / f))
|
|
219
221
|
for s, f in zip(current_shape, scaling_factors, strict=True)
|
|
220
222
|
)
|
|
221
223
|
return shapes
|
|
@@ -233,6 +235,7 @@ class PyramidLevel(BaseModel):
|
|
|
233
235
|
path: str
|
|
234
236
|
shape: tuple[int, ...]
|
|
235
237
|
scale: tuple[float, ...]
|
|
238
|
+
translation: tuple[float, ...]
|
|
236
239
|
chunks: ChunksLike = "auto"
|
|
237
240
|
shards: ShardsLike | None = None
|
|
238
241
|
|
|
@@ -247,6 +250,12 @@ class PyramidLevel(BaseModel):
|
|
|
247
250
|
if any(isinstance(s, float) and s < 0 for s in self.scale):
|
|
248
251
|
raise NgioValueError("Scale values must be positive.")
|
|
249
252
|
|
|
253
|
+
if len(self.translation) != len(self.shape):
|
|
254
|
+
raise NgioValueError(
|
|
255
|
+
"Translation must have the same length as shape "
|
|
256
|
+
f"({len(self.shape)}), got {len(self.translation)}"
|
|
257
|
+
)
|
|
258
|
+
|
|
250
259
|
if isinstance(self.chunks, tuple):
|
|
251
260
|
if len(self.chunks) != len(self.shape):
|
|
252
261
|
raise NgioValueError(
|
|
@@ -271,6 +280,63 @@ class PyramidLevel(BaseModel):
|
|
|
271
280
|
return self
|
|
272
281
|
|
|
273
282
|
|
|
283
|
+
def compute_scales_from_shapes(
|
|
284
|
+
shapes: Sequence[tuple[int, ...]],
|
|
285
|
+
base_scale: tuple[float, ...],
|
|
286
|
+
) -> list[tuple[float, ...]]:
|
|
287
|
+
scales = [base_scale]
|
|
288
|
+
scale_ = base_scale
|
|
289
|
+
for current_shape, next_shape in itertools.pairwise(shapes):
|
|
290
|
+
# This only works for downsampling pyramids
|
|
291
|
+
# The _check_order function (called before) ensures that the
|
|
292
|
+
# shapes are decreasing
|
|
293
|
+
_scaling_factor = tuple(
|
|
294
|
+
s1 / s2
|
|
295
|
+
for s1, s2 in zip(
|
|
296
|
+
current_shape,
|
|
297
|
+
next_shape,
|
|
298
|
+
strict=True,
|
|
299
|
+
)
|
|
300
|
+
)
|
|
301
|
+
scale_ = tuple(s * f for s, f in zip(scale_, _scaling_factor, strict=True))
|
|
302
|
+
scales.append(scale_)
|
|
303
|
+
return scales
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def _compute_translations_from_shapes(
|
|
307
|
+
scales: Sequence[tuple[float, ...]],
|
|
308
|
+
base_translation: Sequence[float] | None,
|
|
309
|
+
) -> list[tuple[float, ...]]:
|
|
310
|
+
translations = []
|
|
311
|
+
if base_translation is None:
|
|
312
|
+
n_dim = len(scales[0])
|
|
313
|
+
base_translation = tuple(0.0 for _ in range(n_dim))
|
|
314
|
+
else:
|
|
315
|
+
base_translation = tuple(base_translation)
|
|
316
|
+
|
|
317
|
+
translation_ = base_translation
|
|
318
|
+
for _ in scales:
|
|
319
|
+
# TBD: How to update translation
|
|
320
|
+
# For now, we keep it constant but we should probably change it
|
|
321
|
+
# to reflect the shift introduced by downsampling
|
|
322
|
+
# translation_ = translation_ + _scaling_factor
|
|
323
|
+
translations.append(translation_)
|
|
324
|
+
return translations
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def _compute_scales_from_factors(
|
|
328
|
+
base_scale: tuple[float, ...], scaling_factors: tuple[float, ...], num_levels: int
|
|
329
|
+
) -> list[tuple[float, ...]]:
|
|
330
|
+
precision_scales = []
|
|
331
|
+
current_scale = base_scale
|
|
332
|
+
for _ in range(num_levels):
|
|
333
|
+
precision_scales.append(current_scale)
|
|
334
|
+
current_scale = tuple(
|
|
335
|
+
s * f for s, f in zip(current_scale, scaling_factors, strict=True)
|
|
336
|
+
)
|
|
337
|
+
return precision_scales
|
|
338
|
+
|
|
339
|
+
|
|
274
340
|
class ImagePyramidBuilder(BaseModel):
|
|
275
341
|
levels: list[PyramidLevel]
|
|
276
342
|
axes: tuple[str, ...]
|
|
@@ -290,6 +356,7 @@ class ImagePyramidBuilder(BaseModel):
|
|
|
290
356
|
base_shape: tuple[int, ...],
|
|
291
357
|
base_scale: tuple[float, ...],
|
|
292
358
|
axes: tuple[str, ...],
|
|
359
|
+
base_translation: Sequence[float] | None = None,
|
|
293
360
|
chunks: ChunksLike = "auto",
|
|
294
361
|
shards: ShardsLike | None = None,
|
|
295
362
|
data_type: str = "uint16",
|
|
@@ -297,16 +364,39 @@ class ImagePyramidBuilder(BaseModel):
|
|
|
297
364
|
compressors: Any = "auto",
|
|
298
365
|
zarr_format: Literal[2, 3] = 2,
|
|
299
366
|
other_array_kwargs: Mapping[str, Any] | None = None,
|
|
367
|
+
precision_scale: bool = True,
|
|
300
368
|
) -> "ImagePyramidBuilder":
|
|
301
|
-
shapes
|
|
369
|
+
# Since shapes needs to be rounded to integers, we compute them here
|
|
370
|
+
# and then pass them to from_shapes
|
|
371
|
+
# This ensures that the shapes and scaling factors are consistent
|
|
372
|
+
# and avoids accumulation of rounding errors
|
|
373
|
+
shapes = compute_shapes_from_scaling_factors(
|
|
302
374
|
base_shape=base_shape,
|
|
303
375
|
scaling_factors=scaling_factors,
|
|
304
376
|
num_levels=len(levels_paths),
|
|
305
377
|
)
|
|
378
|
+
|
|
379
|
+
if precision_scale:
|
|
380
|
+
# Compute precise scales from shapes
|
|
381
|
+
# Since shapes are rounded to integers, the scaling factors
|
|
382
|
+
# may not be exactly the same as the input scaling factors
|
|
383
|
+
# Thus, we compute the scales from the shapes to ensure consistency
|
|
384
|
+
base_scale_ = compute_scales_from_shapes(
|
|
385
|
+
shapes=shapes,
|
|
386
|
+
base_scale=base_scale,
|
|
387
|
+
)
|
|
388
|
+
else:
|
|
389
|
+
base_scale_ = _compute_scales_from_factors(
|
|
390
|
+
base_scale=base_scale,
|
|
391
|
+
scaling_factors=scaling_factors,
|
|
392
|
+
num_levels=len(levels_paths),
|
|
393
|
+
)
|
|
394
|
+
|
|
306
395
|
return cls.from_shapes(
|
|
307
396
|
shapes=shapes,
|
|
308
|
-
base_scale=
|
|
397
|
+
base_scale=base_scale_,
|
|
309
398
|
axes=axes,
|
|
399
|
+
base_translation=base_translation,
|
|
310
400
|
levels_paths=levels_paths,
|
|
311
401
|
chunks=chunks,
|
|
312
402
|
shards=shards,
|
|
@@ -321,8 +411,9 @@ class ImagePyramidBuilder(BaseModel):
|
|
|
321
411
|
def from_shapes(
|
|
322
412
|
cls,
|
|
323
413
|
shapes: Sequence[tuple[int, ...]],
|
|
324
|
-
base_scale: tuple[float, ...],
|
|
414
|
+
base_scale: tuple[float, ...] | list[tuple[float, ...]],
|
|
325
415
|
axes: tuple[str, ...],
|
|
416
|
+
base_translation: Sequence[float] | None = None,
|
|
326
417
|
levels_paths: Sequence[str] | None = None,
|
|
327
418
|
chunks: ChunksLike = "auto",
|
|
328
419
|
shards: ShardsLike | None = None,
|
|
@@ -335,34 +426,42 @@ class ImagePyramidBuilder(BaseModel):
|
|
|
335
426
|
levels = []
|
|
336
427
|
if levels_paths is None:
|
|
337
428
|
levels_paths = tuple(str(i) for i in range(len(shapes)))
|
|
429
|
+
|
|
338
430
|
_check_order(shapes)
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
431
|
+
if isinstance(base_scale, tuple) and all(
|
|
432
|
+
isinstance(s, float) for s in base_scale
|
|
433
|
+
):
|
|
434
|
+
scales = compute_scales_from_shapes(shapes, base_scale)
|
|
435
|
+
elif isinstance(base_scale, list):
|
|
436
|
+
scales = base_scale
|
|
437
|
+
if len(scales) != len(shapes):
|
|
438
|
+
raise NgioValueError(
|
|
439
|
+
"Scales must have the same length as shapes "
|
|
440
|
+
f"({len(shapes)}), got {len(scales)}"
|
|
348
441
|
)
|
|
442
|
+
else:
|
|
443
|
+
raise NgioValueError(
|
|
444
|
+
"base_scale must be either a tuple of floats or a list of tuples "
|
|
445
|
+
" of floats."
|
|
349
446
|
)
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
447
|
+
|
|
448
|
+
translations = _compute_translations_from_shapes(scales, base_translation)
|
|
449
|
+
for level_path, shape, scale, translation in zip(
|
|
450
|
+
levels_paths,
|
|
451
|
+
shapes,
|
|
452
|
+
scales,
|
|
453
|
+
translations,
|
|
454
|
+
strict=True,
|
|
455
|
+
):
|
|
456
|
+
level = PyramidLevel(
|
|
457
|
+
path=level_path,
|
|
458
|
+
shape=shape,
|
|
459
|
+
scale=scale,
|
|
460
|
+
translation=translation,
|
|
461
|
+
chunks=chunks,
|
|
462
|
+
shards=shards,
|
|
463
|
+
)
|
|
464
|
+
levels.append(level)
|
|
366
465
|
other_array_kwargs = other_array_kwargs or {}
|
|
367
466
|
return cls(
|
|
368
467
|
levels=levels,
|
|
@@ -16,9 +16,15 @@ from ngio.common import (
|
|
|
16
16
|
Roi,
|
|
17
17
|
consolidate_pyramid,
|
|
18
18
|
)
|
|
19
|
-
from ngio.common._pyramid import
|
|
19
|
+
from ngio.common._pyramid import (
|
|
20
|
+
ChunksLike,
|
|
21
|
+
ShardsLike,
|
|
22
|
+
compute_scales_from_shapes,
|
|
23
|
+
compute_shapes_from_scaling_factors,
|
|
24
|
+
)
|
|
20
25
|
from ngio.images._create_utils import (
|
|
21
26
|
_image_or_label_meta,
|
|
27
|
+
compute_base_scale,
|
|
22
28
|
init_image_like_from_shapes,
|
|
23
29
|
)
|
|
24
30
|
from ngio.io_pipes import (
|
|
@@ -602,32 +608,39 @@ def consolidate_image(
|
|
|
602
608
|
|
|
603
609
|
def _shapes_from_ref_image(
|
|
604
610
|
ref_image: AbstractImage,
|
|
605
|
-
) -> list[tuple[int, ...]]:
|
|
611
|
+
) -> tuple[list[tuple[int, ...]], list[tuple[float, ...]]]:
|
|
606
612
|
"""Rebuild base shape based on a new shape."""
|
|
607
|
-
|
|
613
|
+
meta = ref_image.meta
|
|
614
|
+
paths = meta.paths
|
|
608
615
|
index_path = paths.index(ref_image.path)
|
|
609
616
|
sub_paths = paths[index_path:]
|
|
610
617
|
group_handler = ref_image._group_handler
|
|
611
|
-
shapes = []
|
|
618
|
+
shapes, scales = [], []
|
|
612
619
|
for path in sub_paths:
|
|
613
620
|
zarr_array = group_handler.get_array(path)
|
|
614
621
|
shapes.append(zarr_array.shape)
|
|
622
|
+
scales.append(meta.get_dataset(path=path).scale)
|
|
615
623
|
if len(shapes) == len(paths):
|
|
616
|
-
return shapes
|
|
624
|
+
return shapes, scales
|
|
617
625
|
missing_levels = len(paths) - len(shapes)
|
|
618
|
-
extended_shapes =
|
|
626
|
+
extended_shapes = compute_shapes_from_scaling_factors(
|
|
619
627
|
base_shape=shapes[-1],
|
|
620
628
|
scaling_factors=ref_image.meta.scaling_factor(),
|
|
621
629
|
num_levels=missing_levels + 1,
|
|
622
630
|
)
|
|
623
631
|
shapes.extend(extended_shapes[1:])
|
|
624
|
-
|
|
632
|
+
extended_scales = compute_scales_from_shapes(
|
|
633
|
+
shapes=extended_shapes,
|
|
634
|
+
base_scale=scales[-1],
|
|
635
|
+
)
|
|
636
|
+
scales.extend(extended_scales[1:])
|
|
637
|
+
return shapes, scales
|
|
625
638
|
|
|
626
639
|
|
|
627
640
|
def _shapes_from_new_shape(
|
|
628
641
|
ref_image: AbstractImage,
|
|
629
642
|
shape: Sequence[int],
|
|
630
|
-
) -> list[tuple[int, ...]]:
|
|
643
|
+
) -> tuple[list[tuple[int, ...]], list[tuple[float, ...]]]:
|
|
631
644
|
"""Rebuild pyramid shapes based on a new base shape."""
|
|
632
645
|
if len(shape) != len(ref_image.shape):
|
|
633
646
|
raise NgioValueError(
|
|
@@ -637,27 +650,33 @@ def _shapes_from_new_shape(
|
|
|
637
650
|
base_shape = tuple(shape)
|
|
638
651
|
scaling_factors = ref_image.meta.scaling_factor()
|
|
639
652
|
num_levels = len(ref_image.meta.paths)
|
|
640
|
-
|
|
653
|
+
shapes = compute_shapes_from_scaling_factors(
|
|
641
654
|
base_shape=base_shape,
|
|
642
655
|
scaling_factors=scaling_factors,
|
|
643
656
|
num_levels=num_levels,
|
|
644
657
|
)
|
|
658
|
+
scales = compute_scales_from_shapes(
|
|
659
|
+
shapes=shapes,
|
|
660
|
+
base_scale=ref_image.dataset.scale,
|
|
661
|
+
)
|
|
662
|
+
return shapes, scales
|
|
645
663
|
|
|
646
664
|
|
|
647
665
|
def _compute_pyramid_shapes(
|
|
648
666
|
ref_image: AbstractImage,
|
|
649
667
|
shape: Sequence[int] | None,
|
|
650
|
-
) -> list[tuple[int, ...]]:
|
|
668
|
+
) -> tuple[list[tuple[int, ...]], list[tuple[float, ...]]]:
|
|
651
669
|
"""Rebuild pyramid shapes based on a new base shape."""
|
|
652
670
|
if shape is None:
|
|
653
671
|
return _shapes_from_ref_image(ref_image=ref_image)
|
|
654
672
|
return _shapes_from_new_shape(ref_image=ref_image, shape=shape)
|
|
655
673
|
|
|
656
674
|
|
|
657
|
-
def
|
|
675
|
+
def _check_len_compatibility(
|
|
658
676
|
ref_shape: tuple[int, ...],
|
|
659
677
|
chunks: ChunksLike,
|
|
660
678
|
shards: ShardsLike | None,
|
|
679
|
+
translation: Sequence[float] | None = None,
|
|
661
680
|
) -> None:
|
|
662
681
|
"""Check if the chunks and shards are compatible with the reference shape.
|
|
663
682
|
|
|
@@ -665,6 +684,7 @@ def _check_chunks_and_shards_compatibility(
|
|
|
665
684
|
ref_shape: The reference shape.
|
|
666
685
|
chunks: The chunks to check.
|
|
667
686
|
shards: The shards to check.
|
|
687
|
+
translation: The translation to check.
|
|
668
688
|
"""
|
|
669
689
|
if chunks != "auto":
|
|
670
690
|
if len(chunks) != len(ref_shape):
|
|
@@ -676,6 +696,12 @@ def _check_chunks_and_shards_compatibility(
|
|
|
676
696
|
raise NgioValueError(
|
|
677
697
|
"The length of the shards must be the same as the number of dimensions."
|
|
678
698
|
)
|
|
699
|
+
if translation is not None:
|
|
700
|
+
if len(translation) != len(ref_shape):
|
|
701
|
+
raise NgioValueError(
|
|
702
|
+
"The length of the translation must be the same as the number of "
|
|
703
|
+
"dimensions."
|
|
704
|
+
)
|
|
679
705
|
|
|
680
706
|
|
|
681
707
|
def _apply_channel_policy(
|
|
@@ -685,7 +711,16 @@ def _apply_channel_policy(
|
|
|
685
711
|
axes: tuple[str, ...],
|
|
686
712
|
chunks: ChunksLike,
|
|
687
713
|
shards: ShardsLike | None,
|
|
688
|
-
|
|
714
|
+
translation: Sequence[float],
|
|
715
|
+
scales: list[tuple[float, ...]] | tuple[float, ...],
|
|
716
|
+
) -> tuple[
|
|
717
|
+
list[tuple[int, ...]],
|
|
718
|
+
tuple[str, ...],
|
|
719
|
+
ChunksLike,
|
|
720
|
+
ShardsLike | None,
|
|
721
|
+
tuple[float, ...],
|
|
722
|
+
list[tuple[float, ...]] | tuple[float, ...],
|
|
723
|
+
]:
|
|
689
724
|
"""Apply the channel policy to the shapes and axes.
|
|
690
725
|
|
|
691
726
|
Args:
|
|
@@ -695,12 +730,15 @@ def _apply_channel_policy(
|
|
|
695
730
|
axes: The axes of the image.
|
|
696
731
|
chunks: The chunks of the image.
|
|
697
732
|
shards: The shards of the image.
|
|
733
|
+
translation: The translation of the image.
|
|
734
|
+
scales: The scales of the image.
|
|
698
735
|
|
|
699
736
|
Returns:
|
|
700
737
|
The new shapes and axes after applying the channel policy.
|
|
701
738
|
"""
|
|
739
|
+
translation = tuple(translation)
|
|
702
740
|
if channels_policy == "same":
|
|
703
|
-
return shapes, axes, chunks, shards
|
|
741
|
+
return shapes, axes, chunks, shards, translation, scales
|
|
704
742
|
|
|
705
743
|
if channels_policy == "singleton":
|
|
706
744
|
# Treat 'singleton' as setting channel size to 1
|
|
@@ -709,7 +747,7 @@ def _apply_channel_policy(
|
|
|
709
747
|
channel_index = ref_image.axes_handler.get_index("c")
|
|
710
748
|
if channel_index is None:
|
|
711
749
|
if channels_policy == "squeeze":
|
|
712
|
-
return shapes, axes, chunks, shards
|
|
750
|
+
return shapes, axes, chunks, shards, translation, scales
|
|
713
751
|
raise NgioValueError(
|
|
714
752
|
f"Cannot apply channel policy {channels_policy=} to an image "
|
|
715
753
|
"without channels axis."
|
|
@@ -719,6 +757,15 @@ def _apply_channel_policy(
|
|
|
719
757
|
for shape in shapes:
|
|
720
758
|
new_shape = shape[:channel_index] + shape[channel_index + 1 :]
|
|
721
759
|
new_shapes.append(new_shape)
|
|
760
|
+
|
|
761
|
+
if isinstance(scales, tuple):
|
|
762
|
+
new_scales = scales[:channel_index] + scales[channel_index + 1 :]
|
|
763
|
+
else:
|
|
764
|
+
new_scales = []
|
|
765
|
+
for scale in scales:
|
|
766
|
+
new_scale = scale[:channel_index] + scale[channel_index + 1 :]
|
|
767
|
+
new_scales.append(new_scale)
|
|
768
|
+
|
|
722
769
|
new_axes = axes[:channel_index] + axes[channel_index + 1 :]
|
|
723
770
|
if chunks == "auto":
|
|
724
771
|
new_chunks: ChunksLike = "auto"
|
|
@@ -728,7 +775,9 @@ def _apply_channel_policy(
|
|
|
728
775
|
new_shards: ShardsLike | None = shards
|
|
729
776
|
else:
|
|
730
777
|
new_shards = shards[:channel_index] + shards[channel_index + 1 :]
|
|
731
|
-
|
|
778
|
+
|
|
779
|
+
translation = translation[:channel_index] + translation[channel_index + 1 :]
|
|
780
|
+
return new_shapes, new_axes, new_chunks, new_shards, translation, new_scales
|
|
732
781
|
elif isinstance(channels_policy, int):
|
|
733
782
|
new_shapes = []
|
|
734
783
|
for shape in shapes:
|
|
@@ -738,7 +787,7 @@ def _apply_channel_policy(
|
|
|
738
787
|
*shape[channel_index + 1 :],
|
|
739
788
|
)
|
|
740
789
|
new_shapes.append(new_shape)
|
|
741
|
-
return new_shapes, axes, chunks, shards
|
|
790
|
+
return new_shapes, axes, chunks, shards, translation, scales
|
|
742
791
|
else:
|
|
743
792
|
raise NgioValueError(
|
|
744
793
|
f"Invalid channels policy: {channels_policy}. "
|
|
@@ -783,6 +832,35 @@ def _check_channels_meta_compatibility(
|
|
|
783
832
|
return channels_meta_
|
|
784
833
|
|
|
785
834
|
|
|
835
|
+
def adapt_scales(
|
|
836
|
+
scales: list[tuple[float, ...]],
|
|
837
|
+
pixelsize: float | tuple[float, float] | None,
|
|
838
|
+
z_spacing: float | None,
|
|
839
|
+
time_spacing: float | None,
|
|
840
|
+
ref_image: AbstractImage,
|
|
841
|
+
) -> list[tuple[float, ...]] | tuple[float, ...]:
|
|
842
|
+
if pixelsize is None and z_spacing is None and time_spacing is None:
|
|
843
|
+
return scales
|
|
844
|
+
pixel_size = ref_image.pixel_size
|
|
845
|
+
if pixelsize is None:
|
|
846
|
+
pixelsize = (pixel_size.y, pixel_size.x)
|
|
847
|
+
if z_spacing is None:
|
|
848
|
+
z_spacing = pixel_size.z
|
|
849
|
+
else:
|
|
850
|
+
z_spacing = z_spacing
|
|
851
|
+
if time_spacing is None:
|
|
852
|
+
time_spacing = pixel_size.t
|
|
853
|
+
else:
|
|
854
|
+
time_spacing = time_spacing
|
|
855
|
+
base_scale = compute_base_scale(
|
|
856
|
+
pixelsize=pixelsize,
|
|
857
|
+
z_spacing=z_spacing,
|
|
858
|
+
time_spacing=time_spacing,
|
|
859
|
+
axes_handler=ref_image.axes_handler,
|
|
860
|
+
)
|
|
861
|
+
return base_scale
|
|
862
|
+
|
|
863
|
+
|
|
786
864
|
def abstract_derive(
|
|
787
865
|
*,
|
|
788
866
|
ref_image: AbstractImage,
|
|
@@ -795,6 +873,7 @@ def abstract_derive(
|
|
|
795
873
|
z_spacing: float | None = None,
|
|
796
874
|
time_spacing: float | None = None,
|
|
797
875
|
name: str | None = None,
|
|
876
|
+
translation: Sequence[float] | None = None,
|
|
798
877
|
channels_policy: Literal["squeeze", "same", "singleton"] | int = "same",
|
|
799
878
|
channels_meta: Sequence[str | Channel] | None = None,
|
|
800
879
|
ngff_version: NgffVersions | None = None,
|
|
@@ -823,6 +902,8 @@ def abstract_derive(
|
|
|
823
902
|
z_spacing (float | None): The z spacing of the new image.
|
|
824
903
|
time_spacing (float | None): The time spacing of the new image.
|
|
825
904
|
name (str | None): The name of the new image.
|
|
905
|
+
translation (Sequence[float] | None): The translation for each axis
|
|
906
|
+
at the highest resolution level. Defaults to None.
|
|
826
907
|
channels_policy (Literal["squeeze", "same", "singleton"] | int):
|
|
827
908
|
Possible policies:
|
|
828
909
|
- If "squeeze", the channels axis will be removed (no matter its size).
|
|
@@ -867,40 +948,23 @@ def abstract_derive(
|
|
|
867
948
|
DeprecationWarning,
|
|
868
949
|
stacklevel=2,
|
|
869
950
|
)
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
time_spacing_ = pixel_size.t
|
|
873
|
-
else:
|
|
874
|
-
if pixelsize is None:
|
|
875
|
-
pixelsize_ = (ref_image.pixel_size.y, ref_image.pixel_size.x)
|
|
876
|
-
else:
|
|
877
|
-
pixelsize_ = pixelsize
|
|
878
|
-
|
|
879
|
-
if z_spacing is None:
|
|
880
|
-
z_spacing_ = ref_image.pixel_size.z
|
|
881
|
-
else:
|
|
882
|
-
z_spacing_ = z_spacing
|
|
883
|
-
|
|
884
|
-
if time_spacing is None:
|
|
885
|
-
time_spacing_ = ref_image.pixel_size.t
|
|
886
|
-
else:
|
|
887
|
-
time_spacing_ = time_spacing
|
|
951
|
+
pixelsize = (pixel_size.y, pixel_size.x)
|
|
952
|
+
# End of deprecated arguments handling
|
|
888
953
|
ref_meta = ref_image.meta
|
|
889
954
|
|
|
890
|
-
shapes = _compute_pyramid_shapes(
|
|
955
|
+
shapes, scales = _compute_pyramid_shapes(
|
|
891
956
|
shape=shape,
|
|
892
957
|
ref_image=ref_image,
|
|
893
958
|
)
|
|
894
959
|
ref_shape = next(iter(shapes))
|
|
895
960
|
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
time_spacing = ref_image.pixel_size.t
|
|
961
|
+
scales = adapt_scales(
|
|
962
|
+
scales=scales,
|
|
963
|
+
pixelsize=pixelsize,
|
|
964
|
+
z_spacing=z_spacing,
|
|
965
|
+
time_spacing=time_spacing,
|
|
966
|
+
ref_image=ref_image,
|
|
967
|
+
)
|
|
904
968
|
|
|
905
969
|
if name is None:
|
|
906
970
|
name = ref_meta.name
|
|
@@ -914,27 +978,33 @@ def abstract_derive(
|
|
|
914
978
|
if compressors is None:
|
|
915
979
|
compressors = ref_image.zarr_array.compressors # type: ignore
|
|
916
980
|
|
|
981
|
+
if translation is None:
|
|
982
|
+
translation = ref_image.dataset.translation
|
|
983
|
+
|
|
917
984
|
if chunks is None:
|
|
918
985
|
chunks = ref_image.zarr_array.chunks
|
|
919
986
|
if shards is None:
|
|
920
987
|
shards = ref_image.zarr_array.shards
|
|
921
988
|
|
|
922
|
-
|
|
989
|
+
_check_len_compatibility(
|
|
923
990
|
ref_shape=ref_shape,
|
|
924
991
|
chunks=chunks,
|
|
925
992
|
shards=shards,
|
|
993
|
+
translation=translation,
|
|
926
994
|
)
|
|
927
995
|
|
|
928
996
|
if ngff_version is None:
|
|
929
997
|
ngff_version = ref_meta.version
|
|
930
998
|
|
|
931
|
-
shapes, axes, chunks, shards = _apply_channel_policy(
|
|
999
|
+
shapes, axes, chunks, shards, translation, scales = _apply_channel_policy(
|
|
932
1000
|
ref_image=ref_image,
|
|
933
1001
|
channels_policy=channels_policy,
|
|
934
1002
|
shapes=shapes,
|
|
935
1003
|
axes=ref_image.axes,
|
|
936
1004
|
chunks=chunks,
|
|
937
1005
|
shards=shards,
|
|
1006
|
+
translation=translation,
|
|
1007
|
+
scales=scales,
|
|
938
1008
|
)
|
|
939
1009
|
channels_meta_ = _check_channels_meta_compatibility(
|
|
940
1010
|
meta_type=meta_type,
|
|
@@ -946,10 +1016,9 @@ def abstract_derive(
|
|
|
946
1016
|
store=store,
|
|
947
1017
|
meta_type=meta_type,
|
|
948
1018
|
shapes=shapes,
|
|
949
|
-
|
|
950
|
-
z_spacing=z_spacing_,
|
|
951
|
-
time_spacing=time_spacing_,
|
|
1019
|
+
base_scale=scales,
|
|
952
1020
|
levels=ref_meta.paths,
|
|
1021
|
+
translation=translation,
|
|
953
1022
|
time_unit=ref_image.time_unit,
|
|
954
1023
|
space_unit=ref_image.space_unit,
|
|
955
1024
|
axes_names=axes,
|
|
@@ -30,6 +30,7 @@ def create_synthetic_ome_zarr(
|
|
|
30
30
|
shape: Sequence[int],
|
|
31
31
|
reference_sample: AVAILABLE_SAMPLES | SampleInfo = "Cardiomyocyte",
|
|
32
32
|
levels: int | list[str] = 5,
|
|
33
|
+
translation: Sequence[float] | None = None,
|
|
33
34
|
table_backend: TableBackend = DefaultTableBackend,
|
|
34
35
|
scaling_factors: Sequence[float] | Literal["auto"] = "auto",
|
|
35
36
|
axes_names: Sequence[str] | None = None,
|
|
@@ -51,6 +52,8 @@ def create_synthetic_ome_zarr(
|
|
|
51
52
|
Defaults to "Cardiomyocyte".
|
|
52
53
|
levels (int | list[str]): The number of levels in the pyramid or a list of
|
|
53
54
|
level names. Defaults to 5.
|
|
55
|
+
translation (Sequence[float] | None): The translation for each axis
|
|
56
|
+
at the highest resolution level. Defaults to None.
|
|
54
57
|
table_backend (TableBackend): Table backend to be used to store tables.
|
|
55
58
|
Defaults to DefaultTableBackend.
|
|
56
59
|
scaling_factors (Sequence[float] | Literal["auto"]): The down-scaling factors
|
|
@@ -86,6 +89,7 @@ def create_synthetic_ome_zarr(
|
|
|
86
89
|
z_spacing=sample_info.z_spacing,
|
|
87
90
|
time_spacing=sample_info.time_spacing,
|
|
88
91
|
levels=levels,
|
|
92
|
+
translation=translation,
|
|
89
93
|
space_unit=sample_info.space_unit,
|
|
90
94
|
time_unit=sample_info.time_unit,
|
|
91
95
|
axes_names=axes_names,
|