diff --git a/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py old mode 100644 new mode 100755 index 5614e44c..c4b40c09 --- a/conformance/ome_zarr_conformance.py +++ b/conformance/ome_zarr_conformance.py @@ -8,23 +8,73 @@ """ from __future__ import annotations -from concurrent.futures import Future, ThreadPoolExecutor + +import json +import logging import os +import re import subprocess as sp -from argparse import ArgumentParser -from pathlib import Path import sys -import re -import json +from argparse import ArgumentParser +from collections.abc import Iterable +from concurrent.futures import Future, ThreadPoolExecutor from dataclasses import dataclass -from typing import Any, Iterable, Literal, Self -import logging +from pathlib import Path +from typing import Any, Literal, Self logger = logging.getLogger("ome_zarr_conformance") here = Path(__file__).resolve().parent.parent tests_dir = here / "tests" +Status = Literal["pass", "fail", "error"] + + +def color(s: str, num: int, is_bright=False, is_background=False) -> str: + match (is_bright, is_background): + case (False, False): + pref = "3" + case (False, True): + pref = "4" + case (True, False): + pref = "9" + case (True, True): + pref = "10" + return f"\x1b[{pref}{num}m{s}\x1b[0m" + + +class Colorer: + def __init__(self) -> None: + self.is_term = sys.stdout.isatty() + + def _colour(self, s: str, num: int, is_bright=False, is_background=False) -> str: + if not self.is_term: + return s + return color(s, num, is_bright, is_background) + + def r(self, s: str) -> str: + return self._colour(s, 1) + + def g(self, s: str) -> str: + return self._colour(s, 2) + + def y(self, s: str) -> str: + return self._colour(s, 3) + + def m(self, s: str) -> str: + return self._colour(s, 5) + + def status(self, s: Status) -> str: + match s: + case "pass": + return self.g(s) + case "fail": + return self.r(s) + case "error": + return self.m(s) + case other: + raise ValueError(f"Unknown status '{other}'") + @dataclass class CommandOutput: @@ -39,7 +89,7 @@ def from_jso(cls, jso: dict[str, Any]) -> Self: @dataclass class TestResult: test_name: str - status: Literal["pass", "fail", "error"] + status: Status message: str | None stderr: str return_code: int @@ -48,14 +98,12 @@ class TestResult: @dataclass class Conformance: - strict: bool valid: bool description: bool | None @classmethod def from_jso(cls, jso: dict[str, Any]) -> Self: return cls( - strict=jso.get("strict", False), valid=jso.get("valid", True), description=jso.get("description"), ) @@ -80,25 +128,21 @@ def __init__( self, exclude_patterns: list[re.Pattern] | None = None, include_patterns: list[re.Pattern] | None = None, - exclude_strict=False, exclude_invalid=False, ) -> None: self.exclude_patterns = exclude_patterns or [] self.include_patterns = include_patterns or [] - if exclude_strict: - self.exclude_patterns.append(re.compile(r"^strict/")) if exclude_invalid: self.exclude_patterns.append(re.compile(r"^\w+/invalid/")) def include(self, name: str) -> bool: if self.exclude_patterns and any(p.search(name) for p in self.exclude_patterns): return False - if self.include_patterns and not any( - p.search(name) for p in self.include_patterns - ): - return False - return True + + if not self.include_patterns: + return True + return any(p.search(name) for p in self.include_patterns) def test_path_to_name(fpath: Path, root: Path) -> str: @@ -110,7 +154,9 @@ def run_test(dingus_cmd: list[str], fpath: Path, test_name: str) -> TestResult: test_logger = logger.getChild(test_name) strictness, validity, *_ = test_name.split("/") - if strictness not in ("strict", "spec"): + # previously there were "strict" tests which treated schema SHOULDs as MUSTs; + # these have since been removed + if strictness != "spec": raise RuntimeError(f"cannot determine strictness from name: {test_name}") if validity == "invalid": @@ -124,6 +170,7 @@ def run_test(dingus_cmd: list[str], fpath: Path, test_name: str) -> TestResult: dingus_cmd + [os.fspath(fpath)], text=True, capture_output=True, + check=False, ) if res.returncode: @@ -205,7 +252,7 @@ def main(raw_args=None): "--exclude-strict", "-S", action="store_true", - help="exclude strict tests", + help="DEPRECATED: exclude strict tests", ) parser.add_argument( "--exclude-invalid", @@ -241,7 +288,12 @@ def main(raw_args=None): 3: logging.DEBUG, }.get(args.verbose, logging.DEBUG) logging.basicConfig(level=lvl) - logging.debug("Got args: %s", args) + logger.debug("Got args: %s", args) + + if args.exclude_strict: + logger.warning( + "Strict test cases are deprecated; -S/--exclude-strict argument is implicit and will soon be removed." + ) if dingus_args is None: print( @@ -267,21 +319,18 @@ def main(raw_args=None): req = Requested( exclude_patterns=args.exclude_pattern, include_patterns=args.include_pattern, - exclude_strict=bool(args.exclude_strict), exclude_invalid=bool(args.exclude_invalid), ) test_paths = ((test_path_to_name(p, dpath), p) for p in dpath.rglob(rglob)) cases = dict(sorted((n, p) for n, p in test_paths if req.include(n))) + c = Colorer() + for res in run_all_tests( dingus_args, cases, ): - row = [ - res.test_name, - res.status, - ] if res.status == "pass": passes += 1 elif res.status == "fail": @@ -289,6 +338,13 @@ def main(raw_args=None): elif res.status == "error": errors += 1 + row = [ + res.test_name, + c.status(res.status), + ] + if res.message: + row.append(" ".join(res.message.split())) + print("\t".join(row)) logger.info("Got %s passes, %s failures, %s errors", passes, failures, errors) diff --git a/examples/label/.config.json b/examples/label/.config.json new file mode 100644 index 00000000..095b45e7 --- /dev/null +++ b/examples/label/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/label.schema" +} diff --git a/examples/label_strict/colors_properties.json b/examples/label/colors_properties.json similarity index 100% rename from examples/label_strict/colors_properties.json rename to examples/label/colors_properties.json diff --git a/examples/label_strict/.config.json b/examples/label_strict/.config.json deleted file mode 100644 index e7329dc9..00000000 --- a/examples/label_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_label.schema" -} diff --git a/examples/multiscales/.config.json b/examples/multiscales/.config.json new file mode 100644 index 00000000..029ae09c --- /dev/null +++ b/examples/multiscales/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/image.schema" +} \ No newline at end of file diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales/multiscales_example.json similarity index 100% rename from examples/multiscales_strict/multiscales_example.json rename to examples/multiscales/multiscales_example.json diff --git a/examples/multiscales_strict/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json similarity index 100% rename from examples/multiscales_strict/multiscales_example_relative.json rename to examples/multiscales/multiscales_example_relative.json diff --git a/examples/multiscales_strict/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json similarity index 100% rename from examples/multiscales_strict/multiscales_reference_to_label.json rename to examples/multiscales/multiscales_reference_to_label.json diff --git a/examples/multiscales_strict/multiscales_transformations.json b/examples/multiscales/multiscales_transformations.json similarity index 100% rename from examples/multiscales_strict/multiscales_transformations.json rename to examples/multiscales/multiscales_transformations.json diff --git a/examples/multiscales_strict/.config.json b/examples/multiscales_strict/.config.json deleted file mode 100644 index b0469538..00000000 --- a/examples/multiscales_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_image.schema" -} diff --git a/examples/plate/.config.json b/examples/plate/.config.json new file mode 100644 index 00000000..939366ad --- /dev/null +++ b/examples/plate/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/plate.schema" +} \ No newline at end of file diff --git a/examples/plate_strict/plate_2wells.json b/examples/plate/plate_2wells.json similarity index 100% rename from examples/plate_strict/plate_2wells.json rename to examples/plate/plate_2wells.json diff --git a/examples/plate_strict/plate_6wells.json b/examples/plate/plate_6wells.json similarity index 100% rename from examples/plate_strict/plate_6wells.json rename to examples/plate/plate_6wells.json diff --git a/examples/plate_strict/.config.json b/examples/plate_strict/.config.json deleted file mode 100644 index a49b1743..00000000 --- a/examples/plate_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_plate.schema" -} diff --git a/examples/well/.config.json b/examples/well/.config.json new file mode 100644 index 00000000..af9ba888 --- /dev/null +++ b/examples/well/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/well.schema" +} \ No newline at end of file diff --git a/examples/well_strict/well_2fields.json b/examples/well/well_2fields.json similarity index 100% rename from examples/well_strict/well_2fields.json rename to examples/well/well_2fields.json diff --git a/examples/well_strict/well_4fields.json b/examples/well/well_4fields.json similarity index 100% rename from examples/well_strict/well_4fields.json rename to examples/well/well_4fields.json diff --git a/examples/well_strict/.config.json b/examples/well_strict/.config.json deleted file mode 100644 index 129ac69c..00000000 --- a/examples/well_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_well.schema" -} diff --git a/index.md b/index.md index 382bb634..fa3cb7ee 100644 --- a/index.md +++ b/index.md @@ -429,7 +429,7 @@ The following transformations are supported: | [`bijection`](#bijection-md) | `"forward":Transformation`
`"inverse":Transformation` | An invertible transformation providing an explicit forward transformation and its inverse. | | [`byDimension`](#bydimension-md) | `"transformations":List[Transformation]`.
Transformations in the array MUST have
`"inputAxes": List[number]`,
and `"outputAxes": List[number]` | A high dimensional transformation using lower dimensional transformations on subsets of dimensions. | -The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUST be compatible with input and output space dimensionality (see details). +The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUST be compatible with input and output space dimensionality (see details). The `input` and `output` fields are objects structured as follows: @@ -471,7 +471,7 @@ Depending on which, different constraints apply to the transformations, as descr - Both `input` and `output` MUST specify a coordinate system `name`. - `path` is required when referencing a coordinate system in a multiscale image subgroup; it MAY be omitted or null when referencing a coordinate system defined in the scene's own `coordinateSystems`. - + In any context, the values given for `name` and `path` provide an unambiguous reference to a named coordinate system. If the `path` field is null or omitted, this is to be interpreted as referring to a named coordinate system in the same `zarr.json` file. @@ -1107,7 +1107,7 @@ An exact reproducibility of pixel values for images transformed and resampled by The multiscale group at `path` MUST satisfy: - **Dimensionality**: If the input coordinate system has `N` axes, the multiscale image at location `path` MUST have `N+1` dimensions. - - **Vector dimension length**: + - **Vector dimension length**: - For `coordinates` transformations, the length of the array along the `coordinate` dimension (last axis) MUST equal `M`, the number of axes in the output coordinate system. - For `displacements` transformations, the length of the array along the `displacement` dimension (last axis) MUST equal `N`, @@ -1407,7 +1407,7 @@ In this example, a multiscales group containing labels is located at `labels/lab :::{dropdown} Example: Complete multiscales metadata A complete example of json-file for a 5D (TCZYX) multiscales with 3 resolution levels could look like this: -```{literalinclude} examples/multiscales_strict/multiscales_example.json +```{literalinclude} examples/multiscales/multiscales_example.json :language: json ``` ::: @@ -1562,7 +1562,7 @@ In the `zarr.json` under the image.zarr group, an explicit `identity` transform the coordinate system named `"physical"` in the multiscales metadata of the original image is the same as the coordinate system named `"physical"` in the multiscales metadata of the label image: -```{literalinclude} examples/multiscales_strict/multiscale_reference_to_label.json +```{literalinclude} examples/multiscales/multiscale_reference_to_label.json :language: json ``` @@ -1586,7 +1586,7 @@ a coordinate system named `"physical"` serves as the "[intrinsic](#spec:hint:mul The `image-label` field contains information about the source image and display colors for the label image, i.e., a label image in which 0s and 1s represent intercellular and cellular space, respectively: -```{literalinclude} examples/label_strict/colors_properties.json +```{literalinclude} examples/label/colors_properties.json :language: json ``` @@ -1665,14 +1665,14 @@ The `rowIndex`, `columnIndex`, and `path` MUST all refer to the same row/column For example the following JSON object defines a plate with two acquisitions and 6 wells (2 rows and 3 columns), containing up to 2 fields of view per acquisition. -```{literalinclude} examples/plate_strict/plate_6wells.json +```{literalinclude} examples/plate/plate_6wells.json :language: json ``` The following JSON object defines a sparse plate with one acquisition and 2 wells in a 96 well plate, containing one field of view per acquisition. -```{literalinclude} examples/plate_strict/plate_2wells.json +```{literalinclude} examples/plate/plate_2wells.json :language: json ``` ::: @@ -1701,14 +1701,14 @@ For example the following JSON object defines a well with four fields of view. The first two fields of view were part of the first acquisition while the last two fields of view were part of the second acquisition. -```{literalinclude} examples/well_strict/well_4fields.json +```{literalinclude} examples/well/well_4fields.json :language: json ``` The following JSON object defines a well with two fields of view in a plate with four acquisitions. The first field is part of the first acquisition, and the second field is part of the last acquisition. -```{literalinclude} examples/well_strict/well_2fields.json +```{literalinclude} examples/well/well_2fields.json :language: json ``` ::: @@ -1866,7 +1866,7 @@ If they do so, it is RECOMMENDED that the scene's first entry under the `coordin If no coordinate system is defined therein, but only in the respective linked multiscale groups, viewers may want to expose a choice for the user to select a coordinate system for display when opening the dataset for the first time. - + ``` diff --git a/pre_build.py b/pre_build.py index 86a4d0d9..86e4565e 100644 --- a/pre_build.py +++ b/pre_build.py @@ -87,14 +87,11 @@ def build_json_schemas(): """ for schema_file in schema_files: - if 'strict' in schema_file: - continue # skip strict schemas - print(f'Processing {schema_file}...') output_path_md = os.path.join(output_directory, f"{Path(schema_file).stem}" + ".md") output_path_html = os.path.join(output_directory, f"{Path(schema_file).stem}" + ".html") os.makedirs(os.path.dirname(output_path_md), exist_ok=True) - os.makedirs(os.path.dirname(output_path_html), exist_ok=True) + os.makedirs(os.path.dirname(output_path_html), exist_ok=True) # Generate the documentation try: diff --git a/schemas/strict_axes.schema b/schemas/strict_axes.schema deleted file mode 100644 index 70288fbc..00000000 --- a/schemas/strict_axes.schema +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_axes.schema", - "title": "NGFF Strict Axes", - "description": "JSON from OME-NGFF .zattrs", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/axes.schema" - }, - { - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "array", - "channel", - "time", - "space", - "displacement", - "coordinate", - "frequency" - ] - } - } - } - } - ] -} diff --git a/schemas/strict_coordinate_systems.schema b/schemas/strict_coordinate_systems.schema deleted file mode 100644 index 2f9c6372..00000000 --- a/schemas/strict_coordinate_systems.schema +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_coordinate_systems.schema", - "allOf" : [ - { - "$ref": "coordinate_systems.schema" - }, - { - "items": { - "type": "object", - "properties": { - "axes": { - "$ref": "strict_axes.schema" - } - } - } - } - ] -} diff --git a/schemas/strict_image.schema b/schemas/strict_image.schema deleted file mode 100644 index cb8196ed..00000000 --- a/schemas/strict_image.schema +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_image.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/image.schema" - }, - { - "properties": { - "ome": { - "properties": { - "multiscales": { - "items": { - "required": [ - "metadata", - "type", - "name" - ] - } - } - } - } - } - } - ] -} diff --git a/schemas/strict_label.schema b/schemas/strict_label.schema deleted file mode 100644 index 50322e86..00000000 --- a/schemas/strict_label.schema +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_label.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/label.schema" - }, - { - "properties": { - "ome": { - "properties": { - "image-label": { - "required": [ - "colors" - ] - } - } - } - } - } - ] -} diff --git a/schemas/strict_ome_zarr.schema b/schemas/strict_ome_zarr.schema deleted file mode 100644 index 25e75302..00000000 --- a/schemas/strict_ome_zarr.schema +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_ome_zarr.schema", - "anyOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/bf2raw.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_image.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_label.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/ome.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_plate.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_well.schema" - } - ] -} diff --git a/schemas/strict_plate.schema b/schemas/strict_plate.schema deleted file mode 100644 index 0a23bb36..00000000 --- a/schemas/strict_plate.schema +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_plate.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/plate.schema" - }, - { - "properties": { - "ome": { - "properties": { - "plate": { - "properties": { - "acquisitions": { - "items": { - "required": [ - "name", - "maximumfieldcount" - ] - } - } - }, - "required": [ - "name" - ] - } - } - } - } - } - ] -} diff --git a/schemas/strict_well.schema b/schemas/strict_well.schema deleted file mode 100644 index 004860ea..00000000 --- a/schemas/strict_well.schema +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_well.schema", - "$ref": "https://ngff.openmicroscopy.org/0.6rc0/schemas/well.schema" -} diff --git a/tests/attributes/strict/invalid/label/no_colors.json b/tests/attributes/strict/invalid/label/no_colors.json deleted file mode 100644 index de107479..00000000 --- a/tests/attributes/strict/invalid/label/no_colors.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "image-label": {} - }, - "_conformance": { - "schema": { - "id": "schemas/strict_label.schema" - }, - "description": "Tests for the strict image-label JSON schema: ", - "valid": false, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/invalid/plate/missing_acquisition_maximumfieldcount.json b/tests/attributes/strict/invalid/plate/missing_acquisition_maximumfieldcount.json deleted file mode 100644 index c84e1252..00000000 --- a/tests/attributes/strict/invalid/plate/missing_acquisition_maximumfieldcount.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.6rc02", - "plate": { - "acquisitions": [ - { - "id": 0, - "name": "0" - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/invalid/plate/missing_acquisition_name.json b/tests/attributes/strict/invalid/plate/missing_acquisition_name.json deleted file mode 100644 index fcf1204f..00000000 --- a/tests/attributes/strict/invalid/plate/missing_acquisition_name.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "plate": { - "acquisitions": [ - { - "id": 0, - "maximumfieldcount": 1 - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/invalid/plate/missing_name.json b/tests/attributes/strict/invalid/plate/missing_name.json deleted file mode 100644 index 61631838..00000000 --- a/tests/attributes/strict/invalid/plate/missing_name.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ome": { - "version": "0.6rc02", - "plate": { - "columns": [ - { - "name": "A" - } - ], - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/image.json b/tests/attributes/strict/valid/image/image.json deleted file mode 100644 index 8606c08c..00000000 --- a/tests/attributes/strict/valid/image/image.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "s0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1 - ], - "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "physical"} - } - ] - } - ], - "name": "simple_image", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/image_metadata.json b/tests/attributes/strict/valid/image/image_metadata.json deleted file mode 100644 index b081fd9e..00000000 --- a/tests/attributes/strict/valid/image/image_metadata.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "@id": "top", - "@type": "ngff:Image", - "multiscales": [ - { - "@id": "inner", - "name": "example", - "datasets": [ - { - "path": "path/to/0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1, - 1 - ], - "input": {"path": "path/to/0"}, - "output": {"name": "physical"} - } - ] - } - ], - "type": "gaussian", - "metadata": { - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": [ - "true", - "false" - ], - "kwargs": { - "multichannel": true - } - }, - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/image_omero.json b/tests/attributes/strict/valid/image/image_omero.json deleted file mode 100644 index c61a7d70..00000000 --- a/tests/attributes/strict/valid/image/image_omero.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "t", - "type": "time" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "physical", - "axes": [ - { - "name": "t", - "type": "time" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "s0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1, - 0.5, - 0.13, - 0.13 - ], - "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "physical"} - } - ] - }, - { - "path": "s1", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1, - 1, - 0.26, - 0.26 - ], - "type": "scale", - "input": {"path": "s1"}, - "output": {"name": "physical"} - } - ] - } - ], - "coordinateTransformations": [ - { - "translation": [ - 0, - 9, - 0.5, - 25.74, - 21.58 - ], - "type": "translation", - "input": {"name": "intrinsic"}, - "output": {"name": "world"} - } - ], - "name": "image_with_omero_metadata", - "type": "foo", - "metadata": { - "key": "value" - } - } - ], - "omero": { - "channels": [ - { - "active": true, - "coefficient": 1.0, - "color": "00FF00", - "family": "linear", - "inverted": false, - "label": "FITC", - "window": { - "end": 813.0, - "max": 870.0, - "min": 102.0, - "start": 82.0 - } - }, - { - "active": true, - "coefficient": 1.0, - "color": "FF0000", - "family": "linear", - "inverted": false, - "label": "RD-TR-PE", - "window": { - "end": 815.0, - "max": 441.0, - "min": 129.0, - "start": 78.0 - } - } - ], - "id": 1, - "rdefs": { - "defaultT": 0, - "defaultZ": 2, - "model": "color" - }, - "version": "0.6rc0" - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/multiscales_example.json b/tests/attributes/strict/valid/image/multiscales_example.json deleted file mode 100644 index 34fce6b1..00000000 --- a/tests/attributes/strict/valid/image/multiscales_example.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "name": "example", - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "intrinsic", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "s0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 0.5, - 0.5, - 0.5 - ], - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} - } - ] - }, - { - "path": "1", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 1.0, - 1.0, - 1.0 - ], - "input": {"path": "s1"}, - "output": {"name": "intrinsic"} - } - ] - }, - { - "path": "s2", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 2.0, - 2.0, - 2.0 - ], - "input": {"path": "s2"}, - "output": {"name": "intrinsic"} - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 1.0, - 1.0, - 1.0 - ], - "input": {"name": "world"}, - "output": {"name": "intrinsic"} - } - ], - "type": "gaussian", - "metadata": { - "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": "[true]", - "kwargs": { - "multichannel": true - } - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/multiscales_transformations.json b/tests/attributes/strict/valid/image/multiscales_transformations.json deleted file mode 100644 index ecd09381..00000000 --- a/tests/attributes/strict/valid/image/multiscales_transformations.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "s0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1 - ], - "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "physical"} - } - ] - } - ], - "coordinateTransformations": [ - { - "scale": [ - 10, - 10 - ], - "type": "scale", - "input": {"name": "physical"}, - "output": {"name": "world"} - } - ], - "name": "image_with_coordinateTransformations", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/plate/strict_acquisitions.json b/tests/attributes/strict/valid/plate/strict_acquisitions.json deleted file mode 100644 index 16520059..00000000 --- a/tests/attributes/strict/valid/plate/strict_acquisitions.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "plate": { - "acquisitions": [ - { - "id": 0, - "name": "0", - "maximumfieldcount": 1 - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/plate/strict_no_acquisitions.json b/tests/attributes/strict/valid/plate/strict_no_acquisitions.json deleted file mode 100644 index c531aca2..00000000 --- a/tests/attributes/strict/valid/plate/strict_no_acquisitions.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "plate": { - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/well/strict_acquisitions.json b/tests/attributes/strict/valid/well/strict_acquisitions.json deleted file mode 100644 index 841a6929..00000000 --- a/tests/attributes/strict/valid/well/strict_acquisitions.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "well": { - "images": [ - { - "acquisition": 0, - "path": "0" - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_well.schema" - }, - "description": "Tests for the strict well JSON schema: ", - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/well/strict_no_acquisitions.json b/tests/attributes/strict/valid/well/strict_no_acquisitions.json deleted file mode 100644 index 58bfe147..00000000 --- a/tests/attributes/strict/valid/well/strict_no_acquisitions.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ome": { - "version": "0.6rc0", - "well": { - "images": [ - { - "path": "0" - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_well.schema" - }, - "description": "Tests for the strict well JSON schema: ", - "strict": true - } -} \ No newline at end of file diff --git a/tests/test_attributes.py b/tests/test_attributes.py index 8e1e51b1..974fa9b8 100644 --- a/tests/test_attributes.py +++ b/tests/test_attributes.py @@ -1,10 +1,10 @@ +import json from pathlib import Path from typing import Any -import json import pytest - -from jsonschema import RefResolver, Draft202012Validator as Validator +from jsonschema import Draft202012Validator as Validator +from jsonschema import RefResolver from jsonschema.exceptions import ValidationError here = Path(__file__).resolve().parent @@ -24,9 +24,6 @@ GENERIC_SCHEMA = schema_store[ f"https://ngff.openmicroscopy.org/{version}/schemas/ome_zarr.schema" ] -STRICT_SCHEMA = schema_store[ - f"https://ngff.openmicroscopy.org/{version}/schemas/strict_ome_zarr.schema" -] case_fnames = sorted(attrs_dir.rglob("*.json")) @@ -46,22 +43,16 @@ def test_attributes(case_fname: Path): conformance = case_obj.get("_conformance", {}) valid = conformance.get("valid", True) - strict = conformance.get("strict", False) - - if strict: - schema = STRICT_SCHEMA - else: - schema = GENERIC_SCHEMA resolver = RefResolver.from_schema( - schema, + GENERIC_SCHEMA, store=schema_store, ) validator_cls = Validator validator = validator_cls( - schema, + GENERIC_SCHEMA, resolver=resolver, ) diff --git a/tests/test_validation.py b/tests/test_validation.py index 1f38f354..923208f4 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,21 +1,19 @@ -import json import glob +import json import os - from dataclasses import dataclass -from typing import List +from pathlib import Path import pytest - -from jsonschema import RefResolver, Draft202012Validator as Validator +from jsonschema import Draft202012Validator as Validator +from jsonschema import RefResolver from jsonschema.exceptions import ValidationError -from pathlib import Path os.chdir(Path(__file__).parent.parent) schema_store = {} for schema_filename in glob.glob("schemas/*"): - if schema_filename.endswith('.schema'): + if schema_filename.endswith(".schema"): with open(schema_filename) as f: schema = json.load(f) schema_store[schema["$id"]] = schema @@ -23,9 +21,6 @@ GENERIC_SCHEMA = schema_store[ "https://ngff.openmicroscopy.org/0.6rc0/schemas/ome_zarr.schema" ] -GENERIC_STRICT_SCHEMA = schema_store[ - "https://ngff.openmicroscopy.org/0.6rc0/schemas/strict_ome_zarr.schema" -] @dataclass @@ -65,8 +60,8 @@ def pytest_generate_tests(metafunc): if "suite" not in metafunc.fixturenames: return - suites: List[Suite] = [] - ids: List[str] = [] + suites: list[Suite] = [] + ids: list[str] = [] # Validation for filename in glob.glob("tests/*.json"): @@ -127,8 +122,8 @@ def test_example_configs(): if has_examples and not has_config: missing.append(subdir[0]) if missing: - raise Exception(f"Directories missing configs: {missing}") + raise FileNotFoundError(f"Directories missing configs: {missing}") -if __name__ == '__main__': - pytest.main([__file__]) \ No newline at end of file +if __name__ == "__main__": + pytest.main([__file__]) diff --git a/tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json b/tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json deleted file mode 100644 index cedf31b6..00000000 --- a/tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "image-label": {} - }, - "_conformance": { - "schema": { - "id": "schemas/strict_label.schema" - }, - "description": "Tests for the strict image-label JSON schema: ", - "valid": false - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/invalid/plate/missing_acquisition_maximumfieldcount.ome.zarr/zarr.json b/tests/zarr/strict/invalid/plate/missing_acquisition_maximumfieldcount.ome.zarr/zarr.json deleted file mode 100644 index d25d7075..00000000 --- a/tests/zarr/strict/invalid/plate/missing_acquisition_maximumfieldcount.ome.zarr/zarr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "plate": { - "acquisitions": [ - { - "id": 0, - "name": "0" - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/invalid/plate/missing_acquisition_name.ome.zarr/zarr.json b/tests/zarr/strict/invalid/plate/missing_acquisition_name.ome.zarr/zarr.json deleted file mode 100644 index bc04d4e3..00000000 --- a/tests/zarr/strict/invalid/plate/missing_acquisition_name.ome.zarr/zarr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "plate": { - "acquisitions": [ - { - "id": 0, - "maximumfieldcount": 1 - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/invalid/plate/missing_name.ome.zarr/zarr.json b/tests/zarr/strict/invalid/plate/missing_name.ome.zarr/zarr.json deleted file mode 100644 index 29074140..00000000 --- a/tests/zarr/strict/invalid/plate/missing_name.ome.zarr/zarr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "plate": { - "columns": [ - { - "name": "A" - } - ], - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: ", - "valid": false - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/image/image.ome.zarr/zarr.json b/tests/zarr/strict/valid/image/image.ome.zarr/zarr.json deleted file mode 100644 index 0d22914c..00000000 --- a/tests/zarr/strict/valid/image/image.ome.zarr/zarr.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1 - ], - "type": "scale", - "input": "0", - "output": "physical" - } - ] - } - ], - "name": "simple_image", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - } - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/image/image_metadata.ome.zarr/zarr.json b/tests/zarr/strict/valid/image/image_metadata.ome.zarr/zarr.json deleted file mode 100644 index 1bd58af9..00000000 --- a/tests/zarr/strict/valid/image/image_metadata.ome.zarr/zarr.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "@id": "top", - "@type": "ngff:Image", - "multiscales": [ - { - "@id": "inner", - "name": "example", - "datasets": [ - { - "path": "path/to/0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1, - 1 - ], - "input": "path/to/0", - "output": "physical" - } - ] - } - ], - "type": "gaussian", - "metadata": { - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": [ - "true", - "false" - ], - "kwargs": { - "multichannel": true - } - }, - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - } - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json b/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json deleted file mode 100644 index e8222896..00000000 --- a/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "t", - "type": "time" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "physical", - "axes": [ - { - "name": "t", - "type": "time" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1, - 0.5, - 0.13, - 0.13 - ], - "type": "scale", - "input": "0", - "output": "physical" - } - ] - }, - { - "path": "1", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1, - 1, - 0.26, - 0.26 - ], - "type": "scale", - "input": "1", - "output": "physical" - } - ] - } - ], - "coordinateTransformations": [ - { - "translation": [ - 0, - 9, - 0.5, - 25.74, - 21.58 - ], - "type": "translation", - "input": "intrinsic", - "output": "world" - } - ], - "name": "image_with_omero_metadata", - "type": "foo", - "metadata": { - "key": "value" - } - } - ], - "omero": { - "channels": [ - { - "active": true, - "coefficient": 1.0, - "color": "00FF00", - "family": "linear", - "inverted": false, - "label": "FITC", - "window": { - "end": 813.0, - "max": 870.0, - "min": 102.0, - "start": 82.0 - } - }, - { - "active": true, - "coefficient": 1.0, - "color": "FF0000", - "family": "linear", - "inverted": false, - "label": "RD-TR-PE", - "window": { - "end": 815.0, - "max": 441.0, - "min": 129.0, - "start": 78.0 - } - } - ], - "id": 1, - "rdefs": { - "defaultT": 0, - "defaultZ": 2, - "model": "color" - }, - "version": "0.6rc0" - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - } - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/image/multiscales_example.ome.zarr/zarr.json b/tests/zarr/strict/valid/image/multiscales_example.ome.zarr/zarr.json deleted file mode 100644 index e9c87a85..00000000 --- a/tests/zarr/strict/valid/image/multiscales_example.ome.zarr/zarr.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "name": "example", - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "intrinsic", - "axes": [ - { - "name": "t", - "type": "time", - "unit": "millisecond" - }, - { - "name": "c", - "type": "channel" - }, - { - "name": "z", - "type": "space", - "unit": "micrometer" - }, - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 0.5, - 0.5, - 0.5 - ], - "input": "0", - "output": "intrinsic" - } - ] - }, - { - "path": "1", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 1.0, - 1.0, - 1.0 - ], - "input": "1", - "output": "intrinsic" - } - ] - }, - { - "path": "2", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 1.0, - 1.0, - 2.0, - 2.0, - 2.0 - ], - "input": "2", - "output": "intrinsic" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "scale", - "scale": [ - 0.1, - 1.0, - 1.0, - 1.0, - 1.0 - ], - "input": "world", - "output": "intrinsic" - } - ], - "type": "gaussian", - "metadata": { - "description": "the fields in metadata depend on the downscaling implementation. Here, the parameters passed to the skimage function are given", - "method": "skimage.transform.pyramid_gaussian", - "version": "0.16.1", - "args": "[true]", - "kwargs": { - "multichannel": true - } - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - } - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/image/multiscales_transformations.ome.zarr/zarr.json b/tests/zarr/strict/valid/image/multiscales_transformations.ome.zarr/zarr.json deleted file mode 100644 index eb562ead..00000000 --- a/tests/zarr/strict/valid/image/multiscales_transformations.ome.zarr/zarr.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - } - ], - "datasets": [ - { - "path": "0", - "coordinateTransformations": [ - { - "scale": [ - 1, - 1 - ], - "type": "scale", - "input": "0", - "output": "physical" - } - ] - } - ], - "coordinateTransformations": [ - { - "scale": [ - 10, - 10 - ], - "type": "scale", - "input": "physical", - "output": "world" - } - ], - "name": "image_with_coordinateTransformations", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - } - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/plate/strict_acquisitions.ome.zarr/zarr.json b/tests/zarr/strict/valid/plate/strict_acquisitions.ome.zarr/zarr.json deleted file mode 100644 index c9b5a501..00000000 --- a/tests/zarr/strict/valid/plate/strict_acquisitions.ome.zarr/zarr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "plate": { - "acquisitions": [ - { - "id": 0, - "name": "0", - "maximumfieldcount": 1 - } - ], - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: " - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/plate/strict_no_acquisitions.ome.zarr/zarr.json b/tests/zarr/strict/valid/plate/strict_no_acquisitions.ome.zarr/zarr.json deleted file mode 100644 index dc80db86..00000000 --- a/tests/zarr/strict/valid/plate/strict_no_acquisitions.ome.zarr/zarr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "plate": { - "columns": [ - { - "name": "A" - } - ], - "name": "test plate", - "rows": [ - { - "name": "1" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_plate.schema" - }, - "description": "Tests for the strict plate JSON schema: " - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/well/strict_acquisitions.ome.zarr/zarr.json b/tests/zarr/strict/valid/well/strict_acquisitions.ome.zarr/zarr.json deleted file mode 100644 index 457197f8..00000000 --- a/tests/zarr/strict/valid/well/strict_acquisitions.ome.zarr/zarr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "well": { - "images": [ - { - "acquisition": 0, - "path": "0" - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_well.schema" - }, - "description": "Tests for the strict well JSON schema: " - } - } -} \ No newline at end of file diff --git a/tests/zarr/strict/valid/well/strict_no_acquisitions.ome.zarr/zarr.json b/tests/zarr/strict/valid/well/strict_no_acquisitions.ome.zarr/zarr.json deleted file mode 100644 index 3836d3a9..00000000 --- a/tests/zarr/strict/valid/well/strict_no_acquisitions.ome.zarr/zarr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "0.6rc0", - "well": { - "images": [ - { - "path": "0" - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_well.schema" - }, - "description": "Tests for the strict well JSON schema: " - } - } -} \ No newline at end of file