From 397cf853c6330fbf0b8655b30ad41193873893ab Mon Sep 17 00:00:00 2001 From: William Moore Date: Thu, 5 Feb 2026 10:13:56 +0000 Subject: [PATCH 01/28] omero fields optional ported from https://github.com/ome/ngff/pull/297/ --- index.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/index.md b/index.md index b7a31020..90d4f85d 100644 --- a/index.md +++ b/index.md @@ -1524,14 +1524,21 @@ for more information. The `omero` metadata is optional, but if present it MUST contain the field `channels`, which is an array of dictionaries describing the channels of the image. -Each dictionary in `channels` MUST contain the field `color`, -which is a string of 6 hexadecimal digits specifying the color of the channel in RGB format. -Each dictionary in `channels` MUST contain the field `window`, -which is a dictionary describing the windowing of the channel. -The field `window` MUST contain the fields `min` and `max`, -which are the minimum and maximum values of the window, respectively. -It MUST also contain the fields `start` and `end`, -which are the start and end values of the window, respectively. +The `channels` array length SHOULD correspond to the size of the `c` axis. +Each dictionary in `channels` MAY contain the following fields: + +- `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. +- `label` (string) Channel name. +- `active` (boolean) Indicates whether the channel should be displayed. +- `window` (dictionary) Values describing the windowing of the channel. All values are optional (MAY). + The `min` and `max` values may be used by viewers as the range of channel sliders. + All values can be floating-point numbers, but will likely be integers for integer pixel types. + - `min` (float) Should correspond to the minimum pixel intensity for that channel. + - `max` (float) Should correspond to the maximum pixel intensity for that channel. + - `start` (float) Start of the rendering window. + - `end` (float) End of the rendering window. +- `inverted` (boolean) If true, the rendering of darkest to brightest pixels should be inverted. + ### "labels" metadata (labels-md)= From a5f44f9968b25141269a1e6373fcd4f51afdf8a8 Mon Sep 17 00:00:00 2001 From: Will Moore Date: Thu, 5 Feb 2026 10:33:00 +0000 Subject: [PATCH 02/28] Apply suggestion from @jo-mueller Co-authored-by: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 90d4f85d..ffc7af39 100644 --- a/index.md +++ b/index.md @@ -1525,7 +1525,7 @@ for more information. The `omero` metadata is optional, but if present it MUST contain the field `channels`, which is an array of dictionaries describing the channels of the image. The `channels` array length SHOULD correspond to the size of the `c` axis. -Each dictionary in `channels` MAY contain the following fields: +Each object in `channels` MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. - `label` (string) Channel name. From 390dfb5724dcb7e48bf2f5d050d9c69e14551feb Mon Sep 17 00:00:00 2001 From: Will Moore Date: Thu, 5 Feb 2026 10:33:23 +0000 Subject: [PATCH 03/28] Apply suggestion from @jo-mueller Co-authored-by: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index ffc7af39..6d60e71f 100644 --- a/index.md +++ b/index.md @@ -1524,7 +1524,7 @@ for more information. The `omero` metadata is optional, but if present it MUST contain the field `channels`, which is an array of dictionaries describing the channels of the image. -The `channels` array length SHOULD correspond to the size of the `c` axis. +The `channels` array length SHOULD correspond to the size of the respective channels axis, if present. Each object in `channels` MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. From e0c81bca41b6183d34081bb15e67e29b85d99f70 Mon Sep 17 00:00:00 2001 From: William Moore Date: Thu, 5 Feb 2026 10:37:47 +0000 Subject: [PATCH 04/28] dictionaries renamed to objects --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 6d60e71f..c50061f4 100644 --- a/index.md +++ b/index.md @@ -1523,7 +1523,7 @@ See the [OMERO WebGateway documentation](https://omero.readthedocs.io/en/stable/ for more information. The `omero` metadata is optional, but if present it MUST contain the field `channels`, -which is an array of dictionaries describing the channels of the image. +which is an array of objects describing the channels of the image. The `channels` array length SHOULD correspond to the size of the respective channels axis, if present. Each object in `channels` MAY contain the following fields: From e9141d300acaa15d2c71fce6d13f2e406d11b1e1 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:03:15 +0100 Subject: [PATCH 05/28] Update index.md --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 724c0a96..79eaa929 100644 --- a/index.md +++ b/index.md @@ -1533,8 +1533,8 @@ Each object in `channels` MAY contain the following fields: - `window` (dictionary) Values describing the windowing of the channel. All values are optional (MAY). The `min` and `max` values may be used by viewers as the range of channel sliders. All values can be floating-point numbers, but will likely be integers for integer pixel types. - - `min` (float) Should correspond to the minimum pixel intensity for that channel. - - `max` (float) Should correspond to the maximum pixel intensity for that channel. + - `min` (float) Default setting for lower bound for values of `start` field. + - `max` (float) Default setting for upper bound for values of `end` field. - `start` (float) Start of the rendering window. - `end` (float) End of the rendering window. - `inverted` (boolean) If true, the rendering of darkest to brightest pixels should be inverted. From 0886492ac442adbbdf2a9e962ab0d7c51c8f37ec Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:16:58 +0100 Subject: [PATCH 06/28] align schema and spec text --- index.md | 6 ++++-- schemas/image.schema | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/index.md b/index.md index 79eaa929..f55b15e7 100644 --- a/index.md +++ b/index.md @@ -1530,11 +1530,13 @@ Each object in `channels` MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. - `label` (string) Channel name. - `active` (boolean) Indicates whether the channel should be displayed. -- `window` (dictionary) Values describing the windowing of the channel. All values are optional (MAY). - The `min` and `max` values may be used by viewers as the range of channel sliders. +- `window` (dictionary) Values describing the windowing of the channel. + If provided, `start` and `end` values MUST be specified. All values can be floating-point numbers, but will likely be integers for integer pixel types. - `min` (float) Default setting for lower bound for values of `start` field. + MAY be used by viewers as the lower range of channel sliders. - `max` (float) Default setting for upper bound for values of `end` field. + MAY be used by viewers as the upper range of channel sliders. - `start` (float) Start of the rendering window. - `end` (float) End of the rendering window. - `inverted` (boolean) If true, the rendering of darkest to brightest pixels should be inverted. diff --git a/schemas/image.schema b/schemas/image.schema index 0907d253..fcba2982 100644 --- a/schemas/image.schema +++ b/schemas/image.schema @@ -137,9 +137,7 @@ }, "required": [ "start", - "min", - "end", - "max" + "end" ] }, "label": { @@ -153,6 +151,9 @@ }, "active": { "type": "boolean" + }, + "inverted": { + "type": "boolean" } } } From 1ecf8207e060e7170f5168d71bab2e83a1aebedf Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:01:15 +0100 Subject: [PATCH 07/28] chore: json example code style --- index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.md b/index.md index f55b15e7..39b89a7e 100644 --- a/index.md +++ b/index.md @@ -1494,9 +1494,9 @@ if not datasets: [=Transitional=] information specific to the channels of an image and how to render it can be found under the `omero` key in the group-level metadata: ```json -"id": 1, # ID in OMERO -"name": "example.tif", # Name as shown in the UI -"channels": [ # Array matching the c dimension size +"id": 1, // ID in OMERO +"name": "example.tif", // Name as shown in the UI +"channels": [ // Array matching the c dimension size { "active": true, "coefficient": 1, @@ -1513,9 +1513,9 @@ if not datasets: } ], "rdefs": { - "defaultT": 0, # First timepoint to show the user - "defaultZ": 118, # First Z section to show the user - "model": "color" # "color" or "greyscale" + "defaultT": 0, // First timepoint to show the user + "defaultZ": 118, // First Z section to show the user + "model": "color" // "color" or "greyscale" } ``` From 16eda0692bf5c40d52f35ce967e05977aefb6ed4 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:01:35 +0100 Subject: [PATCH 08/28] fix: added missing fields to spec text --- index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.md b/index.md index 39b89a7e..db9ec9fe 100644 --- a/index.md +++ b/index.md @@ -1530,6 +1530,8 @@ Each object in `channels` MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. - `label` (string) Channel name. - `active` (boolean) Indicates whether the channel should be displayed. +- `coefficient`: (float) Value to multiply the pixel values of the channel by when rendering. +- `family`: (string) Used transfer function family for rendering the channel, e.g. "linear", "log", "gamma". - `window` (dictionary) Values describing the windowing of the channel. If provided, `start` and `end` values MUST be specified. All values can be floating-point numbers, but will likely be integers for integer pixel types. From b6d5807734b690b8a6f5a88164b761069f45ad3b Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:01:55 +0100 Subject: [PATCH 09/28] chore: semantic line break and text style --- index.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index db9ec9fe..5553570e 100644 --- a/index.md +++ b/index.md @@ -1491,7 +1491,8 @@ if not datasets: ### "omero" metadata (transitional) (omero-md)= -[=Transitional=] information specific to the channels of an image and how to render it can be found under the `omero` key in the group-level metadata: +Information specific to the channels of an image and how to render it +can be found under the `omero` key in the group-level metadata (i.e., under `"ome" > "omero"`): ```json "id": 1, // ID in OMERO @@ -1525,7 +1526,7 @@ for more information. The `omero` metadata is optional, but if present it MUST contain the field `channels`, which is an array of objects describing the channels of the image. The `channels` array length SHOULD correspond to the size of the respective channels axis, if present. -Each object in `channels` MAY contain the following fields: +Each object in `channels` is optional and MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. - `label` (string) Channel name. From cd4509b812606f60253f8a11697770914bbc048f Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:02:20 +0100 Subject: [PATCH 10/28] fix: adding missing `coefficient` to schema --- schemas/image.schema | 3 +++ 1 file changed, 3 insertions(+) diff --git a/schemas/image.schema b/schemas/image.schema index fcba2982..bc181458 100644 --- a/schemas/image.schema +++ b/schemas/image.schema @@ -143,6 +143,9 @@ "label": { "type": "string" }, + "coefficient": { + "type": "number" + }, "family": { "type": "string" }, From 362a98873f5b9df416cfb3b22286e7e232c8fa0f Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:02:28 +0100 Subject: [PATCH 11/28] test: added test cases --- .../spec/invalid/omero/missing_channels.json | 56 +++++++++++ .../spec/invalid/omero/missing_start_end.json | 94 ++++++++++++++++++ .../spec/valid/omero/full_omero_metadata.json | 99 +++++++++++++++++++ 3 files changed, 249 insertions(+) create mode 100644 tests/attributes/spec/invalid/omero/missing_channels.json create mode 100644 tests/attributes/spec/invalid/omero/missing_start_end.json create mode 100644 tests/attributes/spec/valid/omero/full_omero_metadata.json diff --git a/tests/attributes/spec/invalid/omero/missing_channels.json b/tests/attributes/spec/invalid/omero/missing_channels.json new file mode 100644 index 00000000..7c5b7b58 --- /dev/null +++ b/tests/attributes/spec/invalid/omero/missing_channels.json @@ -0,0 +1,56 @@ +{ + "ome": { + "version": "0.6.dev3", + "multiscales": [ + { + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "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, + 1 + ], + "input": "s0", + "output": "physical", + "type": "scale" + } + ] + } + ] + } + ], + "omero": { + } + }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } +} \ No newline at end of file diff --git a/tests/attributes/spec/invalid/omero/missing_start_end.json b/tests/attributes/spec/invalid/omero/missing_start_end.json new file mode 100644 index 00000000..c188b5f9 --- /dev/null +++ b/tests/attributes/spec/invalid/omero/missing_start_end.json @@ -0,0 +1,94 @@ +{ + "ome": { + "version": "0.6.dev3", + "multiscales": [ + { + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "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, + 1 + ], + "input": "s0", + "output": "physical", + "type": "scale" + } + ] + } + ] + } + ], + "omero": { + "channels": [ + { + "label": "Channel:0", + "color": "#ff0000", + "active": true, + "family": "linear", + "coefficient": 1.0, + "inverted": false, + "window": { + "min": 0, + "max": 255 + } + }, + { + "label": "Channel:1", + "color": "#00ff00", + "active": true, + "family": "log", + "coefficient": 0.5, + "inverted": true, + "window": { + "min": 0, + "max": 255 + } + }, + { + "label": "Channel:2", + "color": "#0000ff", + "active": true, + "family": "gamma", + "coefficient": 2.0, + "inverted": false, + "window": { + "min": 0, + "max": 255 + } + } + ] + } + }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } +} \ No newline at end of file diff --git a/tests/attributes/spec/valid/omero/full_omero_metadata.json b/tests/attributes/spec/valid/omero/full_omero_metadata.json new file mode 100644 index 00000000..367d255f --- /dev/null +++ b/tests/attributes/spec/valid/omero/full_omero_metadata.json @@ -0,0 +1,99 @@ +{ + "ome": { + "version": "0.6.dev3", + "multiscales": [ + { + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "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, + 1 + ], + "input": "s0", + "output": "physical", + "type": "scale" + } + ] + } + ] + } + ], + "omero": { + "channels": [ + { + "label": "Channel:0", + "color": "#ff0000", + "active": true, + "family": "linear", + "coefficient": 1.0, + "inverted": false, + "window": { + "min": 0, + "start": 100, + "end": 200, + "max": 255 + } + }, + { + "label": "Channel:1", + "color": "#00ff00", + "active": true, + "family": "log", + "coefficient": 0.5, + "inverted": true, + "window": { + "min": 0, + "start": 50, + "end": 150, + "max": 255 + } + }, + { + "label": "Channel:2", + "color": "#0000ff", + "active": true, + "family": "gamma", + "coefficient": 2.0, + "inverted": false, + "window": { + "min": 0, + "start": 25, + "end": 125, + "max": 255 + } + } + ] + } + }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + } + } +} \ No newline at end of file From facbf73cbba62f3c3f859632aea3fe50351dd8e2 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:26:43 +0100 Subject: [PATCH 12/28] Added note to changelog --- version_history.md | 1 + 1 file changed, 1 insertion(+) diff --git a/version_history.md b/version_history.md index f08db909..041af156 100644 --- a/version_history.md +++ b/version_history.md @@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Updated version keys from `0.6.dev2` to `0.6.dev3` everywhere - style: Homogeneous use of backticks in spec document +- spec: Released requirements for `omero` metadata in the spec document and in schemas. ### Removed From 8d19fd389bb307ec1a237371412f111f4cc9d904 Mon Sep 17 00:00:00 2001 From: William Moore Date: Wed, 22 Jul 2026 11:58:54 +0100 Subject: [PATCH 13/28] Remove 'family' and 'coefficient' from 'omero' schema, docs and samples --- index.md | 4 ---- schemas/image.schema | 6 ------ .../spec/invalid/image/invalid_channels_color.json | 2 -- .../spec/invalid/image/invalid_channels_window.json | 2 -- tests/attributes/spec/invalid/omero/missing_start_end.json | 6 ------ tests/attributes/spec/valid/omero/full_omero_metadata.json | 6 ------ tests/attributes/strict/valid/image/image_omero.json | 4 ---- .../invalid/image/invalid_channels_color.ome.zarr/zarr.json | 2 -- .../image/invalid_channels_window.ome.zarr/zarr.json | 2 -- .../zarr/strict/valid/image/image_omero.ome.zarr/zarr.json | 4 ---- 10 files changed, 38 deletions(-) diff --git a/index.md b/index.md index 7718dc8c..71e0b071 100644 --- a/index.md +++ b/index.md @@ -1440,9 +1440,7 @@ can be found under the `omero` key in the group-level metadata (i.e., under `"om "channels": [ // Array matching the c dimension size { "active": true, - "coefficient": 1, "color": "0000FF", - "family": "linear", "inverted": false, "label": "LaminB1", "window": { @@ -1471,8 +1469,6 @@ Each object in `channels` is optional and MAY contain the following fields: - `color` (string) String of 6 hexadecimal digits specifying the color of the channel in RGB format. - `label` (string) Channel name. - `active` (boolean) Indicates whether the channel should be displayed. -- `coefficient`: (float) Value to multiply the pixel values of the channel by when rendering. -- `family`: (string) Used transfer function family for rendering the channel, e.g. "linear", "log", "gamma". - `window` (dictionary) Values describing the windowing of the channel. If provided, `start` and `end` values MUST be specified. All values can be floating-point numbers, but will likely be integers for integer pixel types. diff --git a/schemas/image.schema b/schemas/image.schema index 9d8a54be..099f35d2 100644 --- a/schemas/image.schema +++ b/schemas/image.schema @@ -244,12 +244,6 @@ "label": { "type": "string" }, - "coefficient": { - "type": "number" - }, - "family": { - "type": "string" - }, "color": { "type": "string" }, diff --git a/tests/attributes/spec/invalid/image/invalid_channels_color.json b/tests/attributes/spec/invalid/image/invalid_channels_color.json index 2521d6cc..a1974bc2 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_color.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_color.json @@ -42,9 +42,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": 255, - "family": "linear", "label": "1234", "window": { "end": 1765.0, diff --git a/tests/attributes/spec/invalid/image/invalid_channels_window.json b/tests/attributes/spec/invalid/image/invalid_channels_window.json index f915eaad..bf394f94 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_window.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_window.json @@ -42,9 +42,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": "ff0000", - "family": "linear", "label": "1234", "window": { "end": "100", diff --git a/tests/attributes/spec/invalid/omero/missing_start_end.json b/tests/attributes/spec/invalid/omero/missing_start_end.json index c188b5f9..0e240d75 100644 --- a/tests/attributes/spec/invalid/omero/missing_start_end.json +++ b/tests/attributes/spec/invalid/omero/missing_start_end.json @@ -50,8 +50,6 @@ "label": "Channel:0", "color": "#ff0000", "active": true, - "family": "linear", - "coefficient": 1.0, "inverted": false, "window": { "min": 0, @@ -62,8 +60,6 @@ "label": "Channel:1", "color": "#00ff00", "active": true, - "family": "log", - "coefficient": 0.5, "inverted": true, "window": { "min": 0, @@ -74,8 +70,6 @@ "label": "Channel:2", "color": "#0000ff", "active": true, - "family": "gamma", - "coefficient": 2.0, "inverted": false, "window": { "min": 0, diff --git a/tests/attributes/spec/valid/omero/full_omero_metadata.json b/tests/attributes/spec/valid/omero/full_omero_metadata.json index 367d255f..31022723 100644 --- a/tests/attributes/spec/valid/omero/full_omero_metadata.json +++ b/tests/attributes/spec/valid/omero/full_omero_metadata.json @@ -50,8 +50,6 @@ "label": "Channel:0", "color": "#ff0000", "active": true, - "family": "linear", - "coefficient": 1.0, "inverted": false, "window": { "min": 0, @@ -64,8 +62,6 @@ "label": "Channel:1", "color": "#00ff00", "active": true, - "family": "log", - "coefficient": 0.5, "inverted": true, "window": { "min": 0, @@ -78,8 +74,6 @@ "label": "Channel:2", "color": "#0000ff", "active": true, - "family": "gamma", - "coefficient": 2.0, "inverted": false, "window": { "min": 0, diff --git a/tests/attributes/strict/valid/image/image_omero.json b/tests/attributes/strict/valid/image/image_omero.json index c61a7d70..5e7555e1 100644 --- a/tests/attributes/strict/valid/image/image_omero.json +++ b/tests/attributes/strict/valid/image/image_omero.json @@ -122,9 +122,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": "00FF00", - "family": "linear", "inverted": false, "label": "FITC", "window": { @@ -136,9 +134,7 @@ }, { "active": true, - "coefficient": 1.0, "color": "FF0000", - "family": "linear", "inverted": false, "label": "RD-TR-PE", "window": { diff --git a/tests/zarr/spec/invalid/image/invalid_channels_color.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/invalid_channels_color.ome.zarr/zarr.json index cd5a8f3e..f6b2632a 100644 --- a/tests/zarr/spec/invalid/image/invalid_channels_color.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/invalid_channels_color.ome.zarr/zarr.json @@ -45,9 +45,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": 255, - "family": "linear", "label": "1234", "window": { "end": 1765.0, diff --git a/tests/zarr/spec/invalid/image/invalid_channels_window.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/invalid_channels_window.ome.zarr/zarr.json index 0c1f59cf..9384f149 100644 --- a/tests/zarr/spec/invalid/image/invalid_channels_window.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/invalid_channels_window.ome.zarr/zarr.json @@ -45,9 +45,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": "ff0000", - "family": "linear", "label": "1234", "window": { "end": "100", 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 index e8222896..1f5e1df4 100644 --- a/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json +++ b/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json @@ -125,9 +125,7 @@ "channels": [ { "active": true, - "coefficient": 1.0, "color": "00FF00", - "family": "linear", "inverted": false, "label": "FITC", "window": { @@ -139,9 +137,7 @@ }, { "active": true, - "coefficient": 1.0, "color": "FF0000", - "family": "linear", "inverted": false, "label": "RD-TR-PE", "window": { From ec207e45a519a0d09ee3aed36a065834bd6deedd Mon Sep 17 00:00:00 2001 From: William Moore Date: Wed, 22 Jul 2026 12:20:40 +0100 Subject: [PATCH 14/28] Remove # from color strings --- tests/attributes/spec/invalid/omero/missing_start_end.json | 6 +++--- tests/attributes/spec/valid/omero/full_omero_metadata.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/attributes/spec/invalid/omero/missing_start_end.json b/tests/attributes/spec/invalid/omero/missing_start_end.json index 0e240d75..8778a74c 100644 --- a/tests/attributes/spec/invalid/omero/missing_start_end.json +++ b/tests/attributes/spec/invalid/omero/missing_start_end.json @@ -48,7 +48,7 @@ "channels": [ { "label": "Channel:0", - "color": "#ff0000", + "color": "ff0000", "active": true, "inverted": false, "window": { @@ -58,7 +58,7 @@ }, { "label": "Channel:1", - "color": "#00ff00", + "color": "00ff00", "active": true, "inverted": true, "window": { @@ -68,7 +68,7 @@ }, { "label": "Channel:2", - "color": "#0000ff", + "color": "0000ff", "active": true, "inverted": false, "window": { diff --git a/tests/attributes/spec/valid/omero/full_omero_metadata.json b/tests/attributes/spec/valid/omero/full_omero_metadata.json index 31022723..c43d0c98 100644 --- a/tests/attributes/spec/valid/omero/full_omero_metadata.json +++ b/tests/attributes/spec/valid/omero/full_omero_metadata.json @@ -48,7 +48,7 @@ "channels": [ { "label": "Channel:0", - "color": "#ff0000", + "color": "ff0000", "active": true, "inverted": false, "window": { @@ -60,7 +60,7 @@ }, { "label": "Channel:1", - "color": "#00ff00", + "color": "00ff00", "active": true, "inverted": true, "window": { @@ -72,7 +72,7 @@ }, { "label": "Channel:2", - "color": "#0000ff", + "color": "0000ff", "active": true, "inverted": false, "window": { From 71caad218e9166eeb3012085230561db64ecd84c Mon Sep 17 00:00:00 2001 From: William Moore Date: Wed, 22 Jul 2026 12:21:09 +0100 Subject: [PATCH 15/28] Update full_omero_metadata.json to 0.6rc0 --- tests/attributes/spec/valid/omero/full_omero_metadata.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/attributes/spec/valid/omero/full_omero_metadata.json b/tests/attributes/spec/valid/omero/full_omero_metadata.json index c43d0c98..77d3a029 100644 --- a/tests/attributes/spec/valid/omero/full_omero_metadata.json +++ b/tests/attributes/spec/valid/omero/full_omero_metadata.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.6.dev3", + "version": "0.6rc0", "multiscales": [ { "coordinateSystems": [ @@ -35,8 +35,8 @@ 1, 1 ], - "input": "s0", - "output": "physical", + "input": {"path": "s0"}, + "output": {"name": "physical"}, "type": "scale" } ] From e69e118b43c0ce2d3a20e479a7f5566dd75455fc Mon Sep 17 00:00:00 2001 From: William Moore Date: Wed, 22 Jul 2026 12:27:02 +0100 Subject: [PATCH 16/28] Remove link to omero docs WebGateway.html since this has no extra info --- index.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/index.md b/index.md index 71e0b071..a543fb14 100644 --- a/index.md +++ b/index.md @@ -1458,9 +1458,6 @@ can be found under the `omero` key in the group-level metadata (i.e., under `"om } ``` -See the [OMERO WebGateway documentation](https://omero.readthedocs.io/en/stable/developers/Web/WebGateway.html#imgdata) -for more information. - The `omero` metadata is optional, but if present it MUST contain the field `channels`, which is an array of objects describing the channels of the image. The `channels` array length SHOULD correspond to the size of the respective channels axis, if present. From 77e66dfa9f86afa4fb6ba65ac780012c19e1a70c Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:51:15 +0200 Subject: [PATCH 17/28] refactor: move examples to _static subdirectory --- examples/{ => _static}/bf2raw/.config.json | 0 examples/{ => _static}/bf2raw/image.json | 0 examples/{ => _static}/bf2raw/plate.json | 0 examples/{ => _static}/label_strict/.config.json | 0 examples/{ => _static}/label_strict/colors_properties.json | 0 examples/{ => _static}/multiscales_strict/.config.json | 0 .../{ => _static}/multiscales_strict/multiscales_example.json | 0 .../multiscales_strict/multiscales_example_relative.json | 0 .../multiscales_strict/multiscales_reference_to_label.json | 0 .../multiscales_strict/multiscales_transformations.json | 0 examples/{ => _static}/ome/.config.json | 0 examples/{ => _static}/ome/series-2.json | 0 examples/{ => _static}/plate_strict/.config.json | 0 examples/{ => _static}/plate_strict/plate_2wells.json | 0 examples/{ => _static}/plate_strict/plate_6wells.json | 0 examples/{ => _static}/scene/.config.json | 0 examples/{ => _static}/scene/scene_registration.json | 0 examples/{ => _static}/scene/scene_stitching.json | 0 examples/{ => _static}/subspace/.config.json | 0 examples/{ => _static}/subspace/subspacePermute.json | 0 examples/{ => _static}/transformations/.config.json | 0 examples/{ => _static}/transformations/affine2d2d.json | 0 .../{ => _static}/transformations/affine2d2d_with_channel.json | 0 examples/{ => _static}/transformations/affine2d3d.json | 0 examples/{ => _static}/transformations/bijection.json | 0 examples/{ => _static}/transformations/bijection_verbose.json | 0 examples/{ => _static}/transformations/byDimension1.json | 0 examples/{ => _static}/transformations/byDimension2.json | 0 .../{ => _static}/transformations/byDimensionCoordinates.json | 0 examples/{ => _static}/transformations/byDimensionInvalid1.json | 0 examples/{ => _static}/transformations/byDimensionInvalid2.json | 0 examples/{ => _static}/transformations/byDimensionXarray.json | 0 examples/{ => _static}/transformations/displacements/.config.json | 0 .../transformations/displacements/displacement_field.json | 0 .../{ => _static}/transformations/displacements/multiscales.json | 0 examples/{ => _static}/transformations/identity.json | 0 examples/{ => _static}/transformations/mapAxis1.json | 0 examples/{ => _static}/transformations/projectAxis.json | 0 examples/{ => _static}/transformations/projectAxis2.json | 0 examples/{ => _static}/transformations/rotation.json | 0 examples/{ => _static}/transformations/scale.json | 0 examples/{ => _static}/transformations/scale_with_discrete.json | 0 examples/{ => _static}/transformations/sequence.json | 0 examples/{ => _static}/transformations/translation.json | 0 examples/{ => _static}/transformations/xarrayLike.json | 0 examples/{ => _static}/well_strict/.config.json | 0 examples/{ => _static}/well_strict/well_2fields.json | 0 examples/{ => _static}/well_strict/well_4fields.json | 0 48 files changed, 0 insertions(+), 0 deletions(-) rename examples/{ => _static}/bf2raw/.config.json (100%) rename examples/{ => _static}/bf2raw/image.json (100%) rename examples/{ => _static}/bf2raw/plate.json (100%) rename examples/{ => _static}/label_strict/.config.json (100%) rename examples/{ => _static}/label_strict/colors_properties.json (100%) rename examples/{ => _static}/multiscales_strict/.config.json (100%) rename examples/{ => _static}/multiscales_strict/multiscales_example.json (100%) rename examples/{ => _static}/multiscales_strict/multiscales_example_relative.json (100%) rename examples/{ => _static}/multiscales_strict/multiscales_reference_to_label.json (100%) rename examples/{ => _static}/multiscales_strict/multiscales_transformations.json (100%) rename examples/{ => _static}/ome/.config.json (100%) rename examples/{ => _static}/ome/series-2.json (100%) rename examples/{ => _static}/plate_strict/.config.json (100%) rename examples/{ => _static}/plate_strict/plate_2wells.json (100%) rename examples/{ => _static}/plate_strict/plate_6wells.json (100%) rename examples/{ => _static}/scene/.config.json (100%) rename examples/{ => _static}/scene/scene_registration.json (100%) rename examples/{ => _static}/scene/scene_stitching.json (100%) rename examples/{ => _static}/subspace/.config.json (100%) rename examples/{ => _static}/subspace/subspacePermute.json (100%) rename examples/{ => _static}/transformations/.config.json (100%) rename examples/{ => _static}/transformations/affine2d2d.json (100%) rename examples/{ => _static}/transformations/affine2d2d_with_channel.json (100%) rename examples/{ => _static}/transformations/affine2d3d.json (100%) rename examples/{ => _static}/transformations/bijection.json (100%) rename examples/{ => _static}/transformations/bijection_verbose.json (100%) rename examples/{ => _static}/transformations/byDimension1.json (100%) rename examples/{ => _static}/transformations/byDimension2.json (100%) rename examples/{ => _static}/transformations/byDimensionCoordinates.json (100%) rename examples/{ => _static}/transformations/byDimensionInvalid1.json (100%) rename examples/{ => _static}/transformations/byDimensionInvalid2.json (100%) rename examples/{ => _static}/transformations/byDimensionXarray.json (100%) rename examples/{ => _static}/transformations/displacements/.config.json (100%) rename examples/{ => _static}/transformations/displacements/displacement_field.json (100%) rename examples/{ => _static}/transformations/displacements/multiscales.json (100%) rename examples/{ => _static}/transformations/identity.json (100%) rename examples/{ => _static}/transformations/mapAxis1.json (100%) rename examples/{ => _static}/transformations/projectAxis.json (100%) rename examples/{ => _static}/transformations/projectAxis2.json (100%) rename examples/{ => _static}/transformations/rotation.json (100%) rename examples/{ => _static}/transformations/scale.json (100%) rename examples/{ => _static}/transformations/scale_with_discrete.json (100%) rename examples/{ => _static}/transformations/sequence.json (100%) rename examples/{ => _static}/transformations/translation.json (100%) rename examples/{ => _static}/transformations/xarrayLike.json (100%) rename examples/{ => _static}/well_strict/.config.json (100%) rename examples/{ => _static}/well_strict/well_2fields.json (100%) rename examples/{ => _static}/well_strict/well_4fields.json (100%) diff --git a/examples/bf2raw/.config.json b/examples/_static/bf2raw/.config.json similarity index 100% rename from examples/bf2raw/.config.json rename to examples/_static/bf2raw/.config.json diff --git a/examples/bf2raw/image.json b/examples/_static/bf2raw/image.json similarity index 100% rename from examples/bf2raw/image.json rename to examples/_static/bf2raw/image.json diff --git a/examples/bf2raw/plate.json b/examples/_static/bf2raw/plate.json similarity index 100% rename from examples/bf2raw/plate.json rename to examples/_static/bf2raw/plate.json diff --git a/examples/label_strict/.config.json b/examples/_static/label_strict/.config.json similarity index 100% rename from examples/label_strict/.config.json rename to examples/_static/label_strict/.config.json diff --git a/examples/label_strict/colors_properties.json b/examples/_static/label_strict/colors_properties.json similarity index 100% rename from examples/label_strict/colors_properties.json rename to examples/_static/label_strict/colors_properties.json diff --git a/examples/multiscales_strict/.config.json b/examples/_static/multiscales_strict/.config.json similarity index 100% rename from examples/multiscales_strict/.config.json rename to examples/_static/multiscales_strict/.config.json diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/_static/multiscales_strict/multiscales_example.json similarity index 100% rename from examples/multiscales_strict/multiscales_example.json rename to examples/_static/multiscales_strict/multiscales_example.json diff --git a/examples/multiscales_strict/multiscales_example_relative.json b/examples/_static/multiscales_strict/multiscales_example_relative.json similarity index 100% rename from examples/multiscales_strict/multiscales_example_relative.json rename to examples/_static/multiscales_strict/multiscales_example_relative.json diff --git a/examples/multiscales_strict/multiscales_reference_to_label.json b/examples/_static/multiscales_strict/multiscales_reference_to_label.json similarity index 100% rename from examples/multiscales_strict/multiscales_reference_to_label.json rename to examples/_static/multiscales_strict/multiscales_reference_to_label.json diff --git a/examples/multiscales_strict/multiscales_transformations.json b/examples/_static/multiscales_strict/multiscales_transformations.json similarity index 100% rename from examples/multiscales_strict/multiscales_transformations.json rename to examples/_static/multiscales_strict/multiscales_transformations.json diff --git a/examples/ome/.config.json b/examples/_static/ome/.config.json similarity index 100% rename from examples/ome/.config.json rename to examples/_static/ome/.config.json diff --git a/examples/ome/series-2.json b/examples/_static/ome/series-2.json similarity index 100% rename from examples/ome/series-2.json rename to examples/_static/ome/series-2.json diff --git a/examples/plate_strict/.config.json b/examples/_static/plate_strict/.config.json similarity index 100% rename from examples/plate_strict/.config.json rename to examples/_static/plate_strict/.config.json diff --git a/examples/plate_strict/plate_2wells.json b/examples/_static/plate_strict/plate_2wells.json similarity index 100% rename from examples/plate_strict/plate_2wells.json rename to examples/_static/plate_strict/plate_2wells.json diff --git a/examples/plate_strict/plate_6wells.json b/examples/_static/plate_strict/plate_6wells.json similarity index 100% rename from examples/plate_strict/plate_6wells.json rename to examples/_static/plate_strict/plate_6wells.json diff --git a/examples/scene/.config.json b/examples/_static/scene/.config.json similarity index 100% rename from examples/scene/.config.json rename to examples/_static/scene/.config.json diff --git a/examples/scene/scene_registration.json b/examples/_static/scene/scene_registration.json similarity index 100% rename from examples/scene/scene_registration.json rename to examples/_static/scene/scene_registration.json diff --git a/examples/scene/scene_stitching.json b/examples/_static/scene/scene_stitching.json similarity index 100% rename from examples/scene/scene_stitching.json rename to examples/_static/scene/scene_stitching.json diff --git a/examples/subspace/.config.json b/examples/_static/subspace/.config.json similarity index 100% rename from examples/subspace/.config.json rename to examples/_static/subspace/.config.json diff --git a/examples/subspace/subspacePermute.json b/examples/_static/subspace/subspacePermute.json similarity index 100% rename from examples/subspace/subspacePermute.json rename to examples/_static/subspace/subspacePermute.json diff --git a/examples/transformations/.config.json b/examples/_static/transformations/.config.json similarity index 100% rename from examples/transformations/.config.json rename to examples/_static/transformations/.config.json diff --git a/examples/transformations/affine2d2d.json b/examples/_static/transformations/affine2d2d.json similarity index 100% rename from examples/transformations/affine2d2d.json rename to examples/_static/transformations/affine2d2d.json diff --git a/examples/transformations/affine2d2d_with_channel.json b/examples/_static/transformations/affine2d2d_with_channel.json similarity index 100% rename from examples/transformations/affine2d2d_with_channel.json rename to examples/_static/transformations/affine2d2d_with_channel.json diff --git a/examples/transformations/affine2d3d.json b/examples/_static/transformations/affine2d3d.json similarity index 100% rename from examples/transformations/affine2d3d.json rename to examples/_static/transformations/affine2d3d.json diff --git a/examples/transformations/bijection.json b/examples/_static/transformations/bijection.json similarity index 100% rename from examples/transformations/bijection.json rename to examples/_static/transformations/bijection.json diff --git a/examples/transformations/bijection_verbose.json b/examples/_static/transformations/bijection_verbose.json similarity index 100% rename from examples/transformations/bijection_verbose.json rename to examples/_static/transformations/bijection_verbose.json diff --git a/examples/transformations/byDimension1.json b/examples/_static/transformations/byDimension1.json similarity index 100% rename from examples/transformations/byDimension1.json rename to examples/_static/transformations/byDimension1.json diff --git a/examples/transformations/byDimension2.json b/examples/_static/transformations/byDimension2.json similarity index 100% rename from examples/transformations/byDimension2.json rename to examples/_static/transformations/byDimension2.json diff --git a/examples/transformations/byDimensionCoordinates.json b/examples/_static/transformations/byDimensionCoordinates.json similarity index 100% rename from examples/transformations/byDimensionCoordinates.json rename to examples/_static/transformations/byDimensionCoordinates.json diff --git a/examples/transformations/byDimensionInvalid1.json b/examples/_static/transformations/byDimensionInvalid1.json similarity index 100% rename from examples/transformations/byDimensionInvalid1.json rename to examples/_static/transformations/byDimensionInvalid1.json diff --git a/examples/transformations/byDimensionInvalid2.json b/examples/_static/transformations/byDimensionInvalid2.json similarity index 100% rename from examples/transformations/byDimensionInvalid2.json rename to examples/_static/transformations/byDimensionInvalid2.json diff --git a/examples/transformations/byDimensionXarray.json b/examples/_static/transformations/byDimensionXarray.json similarity index 100% rename from examples/transformations/byDimensionXarray.json rename to examples/_static/transformations/byDimensionXarray.json diff --git a/examples/transformations/displacements/.config.json b/examples/_static/transformations/displacements/.config.json similarity index 100% rename from examples/transformations/displacements/.config.json rename to examples/_static/transformations/displacements/.config.json diff --git a/examples/transformations/displacements/displacement_field.json b/examples/_static/transformations/displacements/displacement_field.json similarity index 100% rename from examples/transformations/displacements/displacement_field.json rename to examples/_static/transformations/displacements/displacement_field.json diff --git a/examples/transformations/displacements/multiscales.json b/examples/_static/transformations/displacements/multiscales.json similarity index 100% rename from examples/transformations/displacements/multiscales.json rename to examples/_static/transformations/displacements/multiscales.json diff --git a/examples/transformations/identity.json b/examples/_static/transformations/identity.json similarity index 100% rename from examples/transformations/identity.json rename to examples/_static/transformations/identity.json diff --git a/examples/transformations/mapAxis1.json b/examples/_static/transformations/mapAxis1.json similarity index 100% rename from examples/transformations/mapAxis1.json rename to examples/_static/transformations/mapAxis1.json diff --git a/examples/transformations/projectAxis.json b/examples/_static/transformations/projectAxis.json similarity index 100% rename from examples/transformations/projectAxis.json rename to examples/_static/transformations/projectAxis.json diff --git a/examples/transformations/projectAxis2.json b/examples/_static/transformations/projectAxis2.json similarity index 100% rename from examples/transformations/projectAxis2.json rename to examples/_static/transformations/projectAxis2.json diff --git a/examples/transformations/rotation.json b/examples/_static/transformations/rotation.json similarity index 100% rename from examples/transformations/rotation.json rename to examples/_static/transformations/rotation.json diff --git a/examples/transformations/scale.json b/examples/_static/transformations/scale.json similarity index 100% rename from examples/transformations/scale.json rename to examples/_static/transformations/scale.json diff --git a/examples/transformations/scale_with_discrete.json b/examples/_static/transformations/scale_with_discrete.json similarity index 100% rename from examples/transformations/scale_with_discrete.json rename to examples/_static/transformations/scale_with_discrete.json diff --git a/examples/transformations/sequence.json b/examples/_static/transformations/sequence.json similarity index 100% rename from examples/transformations/sequence.json rename to examples/_static/transformations/sequence.json diff --git a/examples/transformations/translation.json b/examples/_static/transformations/translation.json similarity index 100% rename from examples/transformations/translation.json rename to examples/_static/transformations/translation.json diff --git a/examples/transformations/xarrayLike.json b/examples/_static/transformations/xarrayLike.json similarity index 100% rename from examples/transformations/xarrayLike.json rename to examples/_static/transformations/xarrayLike.json diff --git a/examples/well_strict/.config.json b/examples/_static/well_strict/.config.json similarity index 100% rename from examples/well_strict/.config.json rename to examples/_static/well_strict/.config.json diff --git a/examples/well_strict/well_2fields.json b/examples/_static/well_strict/well_2fields.json similarity index 100% rename from examples/well_strict/well_2fields.json rename to examples/_static/well_strict/well_2fields.json diff --git a/examples/well_strict/well_4fields.json b/examples/_static/well_strict/well_4fields.json similarity index 100% rename from examples/well_strict/well_4fields.json rename to examples/_static/well_strict/well_4fields.json From 9e09930f58b87125cc772f97f5a25d71f01532ac Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 19 Aug 2026 11:01:07 +0200 Subject: [PATCH 18/28] feat: added function to replace version key in `examples` --- examples/_static/bf2raw/image.json | 2 +- examples/_static/bf2raw/plate.json | 2 +- .../label_strict/colors_properties.json | 2 +- .../multiscales_example.json | 2 +- .../multiscales_example_relative.json | 2 +- .../multiscales_reference_to_label.json | 2 +- .../multiscales_transformations.json | 2 +- examples/_static/ome/series-2.json | 2 +- .../_static/plate_strict/plate_2wells.json | 2 +- .../_static/plate_strict/plate_6wells.json | 2 +- .../_static/scene/scene_registration.json | 2 +- examples/_static/scene/scene_stitching.json | 2 +- .../_static/subspace/subspacePermute.json | 2 +- .../_static/well_strict/well_2fields.json | 2 +- .../_static/well_strict/well_4fields.json | 2 +- index.md | 62 +++++++++---------- pre_build.py | 26 +++++++- 17 files changed, 70 insertions(+), 48 deletions(-) diff --git a/examples/_static/bf2raw/image.json b/examples/_static/bf2raw/image.json index 28d1019b..9b6d6d19 100644 --- a/examples/_static/bf2raw/image.json +++ b/examples/_static/bf2raw/image.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "bioformats2raw.layout": 3 } } diff --git a/examples/_static/bf2raw/plate.json b/examples/_static/bf2raw/plate.json index 8c21052c..8044f226 100644 --- a/examples/_static/bf2raw/plate.json +++ b/examples/_static/bf2raw/plate.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "bioformats2raw.layout": 3, "plate": { "columns": [ diff --git a/examples/_static/label_strict/colors_properties.json b/examples/_static/label_strict/colors_properties.json index aebd8689..c9d5b835 100644 --- a/examples/_static/label_strict/colors_properties.json +++ b/examples/_static/label_strict/colors_properties.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "multiscales": [ { "coordinateSystems": [ diff --git a/examples/_static/multiscales_strict/multiscales_example.json b/examples/_static/multiscales_strict/multiscales_example.json index ccc340ec..5a922e01 100644 --- a/examples/_static/multiscales_strict/multiscales_example.json +++ b/examples/_static/multiscales_strict/multiscales_example.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "multiscales": [ { "name": "example", diff --git a/examples/_static/multiscales_strict/multiscales_example_relative.json b/examples/_static/multiscales_strict/multiscales_example_relative.json index 2c0c7f26..0ceddc15 100644 --- a/examples/_static/multiscales_strict/multiscales_example_relative.json +++ b/examples/_static/multiscales_strict/multiscales_example_relative.json @@ -1,7 +1,7 @@ { "multiscales": [ { - "version": "0.6rc0", + "version": "{{ VERSION }}", "name": "example", "coordinateSystems" : [ { diff --git a/examples/_static/multiscales_strict/multiscales_reference_to_label.json b/examples/_static/multiscales_strict/multiscales_reference_to_label.json index 0d756cc9..307207ec 100644 --- a/examples/_static/multiscales_strict/multiscales_reference_to_label.json +++ b/examples/_static/multiscales_strict/multiscales_reference_to_label.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "multiscales": [ { "name": "Image", diff --git a/examples/_static/multiscales_strict/multiscales_transformations.json b/examples/_static/multiscales_strict/multiscales_transformations.json index cf601322..50172274 100644 --- a/examples/_static/multiscales_strict/multiscales_transformations.json +++ b/examples/_static/multiscales_strict/multiscales_transformations.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "multiscales": [ { "coordinateSystems": [ diff --git a/examples/_static/ome/series-2.json b/examples/_static/ome/series-2.json index 023d23a7..7d1d9c4d 100644 --- a/examples/_static/ome/series-2.json +++ b/examples/_static/ome/series-2.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "series": ["0", "1"] } } diff --git a/examples/_static/plate_strict/plate_2wells.json b/examples/_static/plate_strict/plate_2wells.json index 09f4bec1..8d6fcc4a 100644 --- a/examples/_static/plate_strict/plate_2wells.json +++ b/examples/_static/plate_strict/plate_2wells.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "plate": { "acquisitions": [ { diff --git a/examples/_static/plate_strict/plate_6wells.json b/examples/_static/plate_strict/plate_6wells.json index 0f6b2d2c..181da381 100644 --- a/examples/_static/plate_strict/plate_6wells.json +++ b/examples/_static/plate_strict/plate_6wells.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "plate": { "acquisitions": [ { diff --git a/examples/_static/scene/scene_registration.json b/examples/_static/scene/scene_registration.json index e70d3fa0..ff856765 100644 --- a/examples/_static/scene/scene_registration.json +++ b/examples/_static/scene/scene_registration.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "scene": { "coordinateTransformations": [ { diff --git a/examples/_static/scene/scene_stitching.json b/examples/_static/scene/scene_stitching.json index e4cf25da..0cce8802 100644 --- a/examples/_static/scene/scene_stitching.json +++ b/examples/_static/scene/scene_stitching.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "scene": { "coordinateTransformations": [ { diff --git a/examples/_static/subspace/subspacePermute.json b/examples/_static/subspace/subspacePermute.json index e2c53ee0..3bdb2380 100644 --- a/examples/_static/subspace/subspacePermute.json +++ b/examples/_static/subspace/subspacePermute.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "multiscales": [ { "name": "multiscales", diff --git a/examples/_static/well_strict/well_2fields.json b/examples/_static/well_strict/well_2fields.json index 636edf2e..763f5b50 100644 --- a/examples/_static/well_strict/well_2fields.json +++ b/examples/_static/well_strict/well_2fields.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "well": { "images": [ { diff --git a/examples/_static/well_strict/well_4fields.json b/examples/_static/well_strict/well_4fields.json index 9baae566..7a80782a 100644 --- a/examples/_static/well_strict/well_4fields.json +++ b/examples/_static/well_strict/well_4fields.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0", + "version": "{{ VERSION }}", "well": { "images": [ { diff --git a/index.md b/index.md index 382bb634..ce129854 100644 --- a/index.md +++ b/index.md @@ -346,7 +346,7 @@ series.ome.zarr # One converted fileset from bioformats2raw The OME-Zarr Metadata in the top-level `zarr.json` file must contain the `bioformats2raw.layout` key: -```{literalinclude} examples/bf2raw/image.json +```{literalinclude} examples/_build/bf2raw/image.json :language: json ``` @@ -354,13 +354,13 @@ If the top-level group represents a plate, the `bioformats2raw.layout` metadata but the `plate` key MUST also be present, takes precedence and parsing of such datasets should follow (see [plate metadata](#plate-md)). It is not possible to mix collections of images with plates at present. -```{literalinclude} examples/bf2raw/plate.json +```{literalinclude} examples/_build/bf2raw/plate.json :language: json ``` The OME-Zarr Metadata in the `zarr.json` file within the OME group may contain the `series` key: -```{literalinclude} examples/ome/series-2.json +```{literalinclude} examples/_build/ome/series-2.json :language: json ``` @@ -698,7 +698,7 @@ is set to the position of the ith axis of the input coordinate system. :::{dropdown} Example -```{literalinclude} examples/transformations/identity.json +```{literalinclude} examples/_build/transformations/identity.json :language: json ``` @@ -730,7 +730,7 @@ The value at position `i` in the array indicates which input axis becomes the `i :::{dropdown} Example 1 -```{literalinclude} examples/transformations/mapAxis1.json +```{literalinclude} examples/_build/transformations/mapAxis1.json :language: json ``` @@ -771,7 +771,7 @@ In this example, the output coordinate system `out` contains two more axes (`c` than the input coordinate system `in`. This is reflected by the following `projectAxis` transformation: -```{literalinclude} examples/transformations/projectAxis.json +```{literalinclude} examples/_build/transformations/projectAxis.json :language: json ``` @@ -789,7 +789,7 @@ In this example, the output coordinate system `out` contains one axes more (`z`) than the input coordinate system `in`. This is reflected by the following `projectAxis` transformation: -```{literalinclude} examples/transformations/projectAxis2.json +```{literalinclude} examples/_build/transformations/projectAxis2.json :language: json ``` which defines the function @@ -824,7 +824,7 @@ The array MUST have length `N`. :::{dropdown} Example -```{literalinclude} examples/transformations/translation.json +```{literalinclude} examples/_build/transformations/translation.json :language: json ``` @@ -852,7 +852,7 @@ The array MUST have length `N`. :::{dropdown} Example 1 (spec:example:coordinate_transformation_scale)= -```{literalinclude} examples/transformations/scale.json +```{literalinclude} examples/_build/transformations/scale.json :language: json ``` @@ -871,7 +871,7 @@ i.e., the mapping from the first input axis to the first output axis is determin If the data contains discrete axes (e.g., channels), these axes are typically not transformed, but must be represented in the scale parameters. -```{literalinclude} examples/transformations/scale_with_discrete.json +```{literalinclude} examples/_build/transformations/scale_with_discrete.json :language: json ``` ::: @@ -898,7 +898,7 @@ where the outer array MUST be length `M` and the inner arrays MUST be length `N+ :::{dropdown} Example 1 A 2D-2D example: -```{literalinclude} examples/transformations/affine2d2d.json +```{literalinclude} examples/_build/transformations/affine2d2d.json :language: json ``` @@ -929,7 +929,7 @@ Note that the order of the axes can in general be determined by the application These axes relate to the memory or on-disk order insofar as the last dimension is contiguous when the zarr array is c-order (the default for zarr version 2, and the only option for zarr version 3). -```{literalinclude} examples/transformations/affine2d3d.json +```{literalinclude} examples/_build/transformations/affine2d3d.json :language: json ``` @@ -959,7 +959,7 @@ where the last row `[0 0 1]` is omitted in the JSON representation. If the image data contains discrete axes (e.g., channels), these axes are typically not transformed, but must be represented in the transformation matrix. -```{literalinclude} examples/transformations/affine2d2d_with_channel.json +```{literalinclude} examples/_build/transformations/affine2d2d_with_channel.json :language: json ``` ::: @@ -987,7 +987,7 @@ and the inner arrays MUST be length `N`. :::{dropdown} Example A 2D example -```{literalinclude} examples/transformations/rotation.json +```{literalinclude} examples/_build/transformations/rotation.json :language: json ``` @@ -1032,7 +1032,7 @@ f2(f1(f0(x))) This sequence: -```{literalinclude} examples/transformations/sequence.json +```{literalinclude} examples/_build/transformations/sequence.json :language: json ``` @@ -1135,7 +1135,7 @@ Applying the transformation to a point `x` in physical coordinates in the input In this example, a `displacements` transformation is defined between two 2D coordinate systems, `physical` and `output`. The transformation references a displacement vector field located at `coordinateTransformations/displacementField`. -```{literalinclude} examples/transformations/displacements/multiscales.json +```{literalinclude} examples/_build/transformations/displacements/multiscales.json :language: json ``` @@ -1143,7 +1143,7 @@ This multiscales (containing the vector field) MUST have three dimensions, i.e., `x` and `y` as mandated by the input coordinate system and an additional dimension `c` to hold the x- and y-displacements. The metadata for the multiscale group at location `coordinateTransformations/displacementField` would look as follows: -```{literalinclude} examples/transformations/displacements/displacement_field.json +```{literalinclude} examples/_build/transformations/displacements/displacement_field.json :language: json ``` @@ -1195,7 +1195,7 @@ using lower dimensional transformations on subsets of dimensions. A valid `byDimension` transformation: -```{literalinclude} examples/transformations/byDimension1.json +```{literalinclude} examples/_build/transformations/byDimension1.json :language: json ``` ::: @@ -1204,7 +1204,7 @@ A valid `byDimension` transformation: Another valid `byDimension` transformation: -```{literalinclude} examples/transformations/byDimension2.json +```{literalinclude} examples/_build/transformations/byDimension2.json :language: json ``` ::: @@ -1213,7 +1213,7 @@ Another valid `byDimension` transformation: This is an **invalid** `byDimension` transform: -```{literalinclude} examples/transformations/byDimensionInvalid1.json +```{literalinclude} examples/_build/transformations/byDimensionInvalid1.json :language: json ``` @@ -1226,7 +1226,7 @@ The coordinate system has two axes (indices `0` and `1`), but the transformation Another **invalid** `byDimension` transform: -```{literalinclude} examples/transformations/byDimensionInvalid2.json +```{literalinclude} examples/_build/transformations/byDimensionInvalid2.json :language: json ``` @@ -1260,13 +1260,13 @@ It may not be correct for any point of appropriate dimensionality. :::{dropdown} Example -```{literalinclude} examples/transformations/bijection.json +```{literalinclude} examples/_build/transformations/bijection.json :language: json ``` the input and output of the `forward` and `inverse` transformations are understood to be: -```{literalinclude} examples/transformations/bijection_verbose.json +```{literalinclude} examples/_build/transformations/bijection_verbose.json :language: json ``` ::: @@ -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/_build/multiscales_strict/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/_build/multiscales_strict/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/_build/label_strict/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/_build/plate_strict/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/_build/plate_strict/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/_build/well_strict/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/_build/well_strict/well_2fields.json :language: json ``` ::: @@ -1905,6 +1905,6 @@ Copyright © 2025 W3C® (MIT, ERCIM, Keio, Beihang). ```{toctree} :maxdepth: 1 -examples/index +examples/_build/index schemas/index ``` diff --git a/pre_build.py b/pre_build.py index 86a4d0d9..5da7745c 100644 --- a/pre_build.py +++ b/pre_build.py @@ -4,6 +4,7 @@ from pathlib import Path import jsonc as json import logging +from _version import __version__ # Suppress warnings from json-schema-for-humans about unresolvable URLs logging.getLogger().setLevel(logging.ERROR) @@ -12,11 +13,31 @@ os.chdir(os.path.dirname(os.path.abspath(__file__))) +def update_version_in_json(): + """Update the version in the JSON examples.""" + + examples_dir='examples' + json_files = glob.glob(os.path.join(examples_dir, '**', '*.json'), recursive=True) + for json_file in json_files: + with open(json_file, 'r') as f: + content = f.read() + # version is marked as "{{ VERSION }}" in the examples, + # so we can replace it with the actual version + content = content.replace('{{ VERSION }}', __version__) + + # store updated content to a different directory + # to avoid overwriting the original examples + + new_file_path = json_file.replace("_static", "_build") + os.makedirs(os.path.dirname(new_file_path), exist_ok=True) + with open(new_file_path, 'w') as f: + f.write(content) + def build_json_examples(): """Build markdown files from json examples.""" # glob recursively to find all json files - input_directory = 'examples' - output_directory = 'examples' + input_directory = 'examples/_build' + output_directory = 'examples/_build' os.makedirs(output_directory, exist_ok=True) # iterate over all folders in the examples directory @@ -198,6 +219,7 @@ def render_authors_md(): f.write(markdown_authors) +update_version_in_json() build_json_examples() build_json_schemas() build_footer() From 4cc757090f1234728ce0771276c9f5d54386c79e Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Wed, 19 Aug 2026 11:15:06 +0200 Subject: [PATCH 19/28] feat: ignore built json files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e7e34dc8..54c43d54 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ schemas/**/*.md schemas/**/*.html schemas/**/*.css schemas/**/*.js +examples/_build # Byte-compiled / optimized / DLL files __pycache__/ From 845f6729d8b31c85ff499a41c9d494e7d38f886a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 5 Aug 2026 12:03:15 +0100 Subject: [PATCH 20/28] Remove strict schemas --- schemas/strict_axes.schema | 30 ---------------------- schemas/strict_coordinate_systems.schema | 19 -------------- schemas/strict_image.schema | 26 ------------------- schemas/strict_label.schema | 22 ---------------- schemas/strict_ome_zarr.schema | 24 ------------------ schemas/strict_plate.schema | 32 ------------------------ schemas/strict_well.schema | 5 ---- 7 files changed, 158 deletions(-) delete mode 100644 schemas/strict_axes.schema delete mode 100644 schemas/strict_coordinate_systems.schema delete mode 100644 schemas/strict_image.schema delete mode 100644 schemas/strict_label.schema delete mode 100644 schemas/strict_ome_zarr.schema delete mode 100644 schemas/strict_plate.schema delete mode 100644 schemas/strict_well.schema 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" -} From a983c758cc95caba7e1c4bf36578cf71857c96cb Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Thu, 20 Aug 2026 17:18:57 +0100 Subject: [PATCH 21/28] Remove strict test cases --- .../strict/invalid/label/no_colors.json | 14 -- ...missing_acquisition_maximumfieldcount.json | 39 ---- .../plate/missing_acquisition_name.json | 39 ---- .../strict/invalid/plate/missing_name.json | 32 ---- .../attributes/strict/valid/image/image.json | 53 ------ .../strict/valid/image/image_metadata.json | 64 ------- .../strict/valid/image/image_omero.json | 163 ----------------- .../valid/image/multiscales_example.json | 153 ---------------- .../image/multiscales_transformations.json | 79 --------- .../valid/plate/strict_acquisitions.json | 39 ---- .../valid/plate/strict_no_acquisitions.json | 32 ---- .../valid/well/strict_acquisitions.json | 20 --- .../valid/well/strict_no_acquisitions.json | 19 -- .../label/no_colors.ome.zarr/zarr.json | 17 -- .../zarr.json | 42 ----- .../zarr.json | 42 ----- .../plate/missing_name.ome.zarr/zarr.json | 35 ---- .../valid/image/image.ome.zarr/zarr.json | 56 ------ .../image/image_metadata.ome.zarr/zarr.json | 67 ------- .../image/image_omero.ome.zarr/zarr.json | 166 ------------------ .../multiscales_example.ome.zarr/zarr.json | 156 ---------------- .../zarr.json | 82 --------- .../strict_acquisitions.ome.zarr/zarr.json | 42 ----- .../strict_no_acquisitions.ome.zarr/zarr.json | 35 ---- .../strict_acquisitions.ome.zarr/zarr.json | 23 --- .../strict_no_acquisitions.ome.zarr/zarr.json | 22 --- 26 files changed, 1531 deletions(-) delete mode 100644 tests/attributes/strict/invalid/label/no_colors.json delete mode 100644 tests/attributes/strict/invalid/plate/missing_acquisition_maximumfieldcount.json delete mode 100644 tests/attributes/strict/invalid/plate/missing_acquisition_name.json delete mode 100644 tests/attributes/strict/invalid/plate/missing_name.json delete mode 100644 tests/attributes/strict/valid/image/image.json delete mode 100644 tests/attributes/strict/valid/image/image_metadata.json delete mode 100644 tests/attributes/strict/valid/image/image_omero.json delete mode 100644 tests/attributes/strict/valid/image/multiscales_example.json delete mode 100644 tests/attributes/strict/valid/image/multiscales_transformations.json delete mode 100644 tests/attributes/strict/valid/plate/strict_acquisitions.json delete mode 100644 tests/attributes/strict/valid/plate/strict_no_acquisitions.json delete mode 100644 tests/attributes/strict/valid/well/strict_acquisitions.json delete mode 100644 tests/attributes/strict/valid/well/strict_no_acquisitions.json delete mode 100644 tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/invalid/plate/missing_acquisition_maximumfieldcount.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/invalid/plate/missing_acquisition_name.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/invalid/plate/missing_name.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/image/image.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/image/image_metadata.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/image/multiscales_example.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/image/multiscales_transformations.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/plate/strict_acquisitions.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/plate/strict_no_acquisitions.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/well/strict_acquisitions.ome.zarr/zarr.json delete mode 100644 tests/zarr/strict/valid/well/strict_no_acquisitions.ome.zarr/zarr.json 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 5e7555e1..00000000 --- a/tests/attributes/strict/valid/image/image_omero.json +++ /dev/null @@ -1,163 +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, - "color": "00FF00", - "inverted": false, - "label": "FITC", - "window": { - "end": 813.0, - "max": 870.0, - "min": 102.0, - "start": 82.0 - } - }, - { - "active": true, - "color": "FF0000", - "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/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 1f5e1df4..00000000 --- a/tests/zarr/strict/valid/image/image_omero.ome.zarr/zarr.json +++ /dev/null @@ -1,166 +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, - "color": "00FF00", - "inverted": false, - "label": "FITC", - "window": { - "end": 813.0, - "max": 870.0, - "min": 102.0, - "start": 82.0 - } - }, - { - "active": true, - "color": "FF0000", - "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 From 6c7218dca205b14faf7ac2b8f8cb97f0c98baf4c Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 5 Aug 2026 12:16:35 +0100 Subject: [PATCH 22/28] Add color, remove strict from conformance tester --- conformance/ome_zarr_conformance.py | 98 +++++++++++++++++++++++------ 1 file changed, 79 insertions(+), 19 deletions(-) mode change 100644 => 100755 conformance/ome_zarr_conformance.py diff --git a/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py old mode 100644 new mode 100755 index 5614e44c..cfe996d6 --- 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 @@ -94,11 +144,10 @@ def __init__( 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: @@ -124,6 +173,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 +255,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 +291,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( @@ -274,14 +329,12 @@ def main(raw_args=None): 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 +342,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) From 9a6aeb397497c3cd1f43c67e00c81a99d0ef67e4 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 5 Aug 2026 12:18:01 +0100 Subject: [PATCH 23/28] Rename strict examples --- examples/label/.config.json | 3 +++ examples/{label_strict => label}/colors_properties.json | 0 examples/label_strict/.config.json | 3 --- examples/multiscales/.config.json | 3 +++ .../multiscales_example.json | 0 .../multiscales_example_relative.json | 0 .../multiscales_reference_to_label.json | 0 .../multiscales_transformations.json | 0 examples/multiscales_strict/.config.json | 3 --- examples/plate/.config.json | 3 +++ examples/{plate_strict => plate}/plate_2wells.json | 0 examples/{plate_strict => plate}/plate_6wells.json | 0 examples/plate_strict/.config.json | 3 --- examples/well/.config.json | 3 +++ examples/{well_strict => well}/well_2fields.json | 0 examples/{well_strict => well}/well_4fields.json | 0 examples/well_strict/.config.json | 3 --- 17 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 examples/label/.config.json rename examples/{label_strict => label}/colors_properties.json (100%) delete mode 100644 examples/label_strict/.config.json create mode 100644 examples/multiscales/.config.json rename examples/{multiscales_strict => multiscales}/multiscales_example.json (100%) rename examples/{multiscales_strict => multiscales}/multiscales_example_relative.json (100%) rename examples/{multiscales_strict => multiscales}/multiscales_reference_to_label.json (100%) rename examples/{multiscales_strict => multiscales}/multiscales_transformations.json (100%) delete mode 100644 examples/multiscales_strict/.config.json create mode 100644 examples/plate/.config.json rename examples/{plate_strict => plate}/plate_2wells.json (100%) rename examples/{plate_strict => plate}/plate_6wells.json (100%) delete mode 100644 examples/plate_strict/.config.json create mode 100644 examples/well/.config.json rename examples/{well_strict => well}/well_2fields.json (100%) rename examples/{well_strict => well}/well_4fields.json (100%) delete mode 100644 examples/well_strict/.config.json 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" -} From 4e7cd93facfd47cb70210601e1c7b3f0daa8b370 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 5 Aug 2026 12:26:32 +0100 Subject: [PATCH 24/28] Remove strict examples from index.md --- index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/index.md b/index.md index 577e9d01..8c43bc59 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 ``` ::: @@ -1566,7 +1566,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 ``` @@ -1590,7 +1590,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 ``` @@ -1669,14 +1669,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 ``` ::: @@ -1705,14 +1705,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 ``` ::: @@ -1870,7 +1870,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. - + ``` From 947bdaa580bf77d10eb9c4e4ceab0965fe1aa351 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 5 Aug 2026 12:26:46 +0100 Subject: [PATCH 25/28] Remove strictness handling from scripts --- conformance/ome_zarr_conformance.py | 10 +++------- pre_build.py | 5 +---- tests/test_attributes.py | 19 +++++-------------- tests/test_validation.py | 25 ++++++++++--------------- 4 files changed, 19 insertions(+), 40 deletions(-) diff --git a/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py index cfe996d6..c4b40c09 100755 --- a/conformance/ome_zarr_conformance.py +++ b/conformance/ome_zarr_conformance.py @@ -98,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"), ) @@ -130,14 +128,11 @@ 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/")) @@ -159,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": @@ -322,7 +319,6 @@ 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), ) 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/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__]) From 014d33fc88de815bff84c87d3e207b1d90d097c6 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 24 Aug 2026 11:57:51 +0200 Subject: [PATCH 26/28] rebase on https://github.com/ome/ngff-spec/pull/176 p2 --- examples/{ => _static}/label/.config.json | 0 .../colors_properties.json | 0 examples/_static/label_strict/.config.json | 3 - .../{ => _static}/multiscales/.config.json | 0 .../multiscales_example.json | 0 .../multiscales_example_relative.json | 0 .../multiscales_reference_to_label.json | 0 .../multiscales_transformations.json | 0 .../_static/multiscales_strict/.config.json | 3 - examples/{ => _static}/plate/.config.json | 0 .../{plate_strict => plate}/plate_2wells.json | 0 .../{plate_strict => plate}/plate_6wells.json | 0 examples/_static/plate_strict/.config.json | 3 - examples/{ => _static}/well/.config.json | 0 .../{well_strict => well}/well_2fields.json | 0 .../{well_strict => well}/well_4fields.json | 0 examples/_static/well_strict/.config.json | 3 - examples/label/colors_properties.json | 64 ------------ examples/multiscales/multiscales_example.json | 93 ------------------ .../multiscales_example_relative.json | 92 ------------------ .../multiscales_reference_to_label.json | 40 -------- .../multiscales_transformations.json | 71 -------------- examples/plate/plate_2wells.json | 97 ------------------- examples/plate/plate_6wells.json | 78 --------------- examples/well/well_2fields.json | 21 ---- examples/well/well_4fields.json | 29 ------ 26 files changed, 597 deletions(-) rename examples/{ => _static}/label/.config.json (100%) rename examples/_static/{label_strict => label}/colors_properties.json (100%) delete mode 100644 examples/_static/label_strict/.config.json rename examples/{ => _static}/multiscales/.config.json (100%) rename examples/_static/{multiscales_strict => multiscales}/multiscales_example.json (100%) rename examples/_static/{multiscales_strict => multiscales}/multiscales_example_relative.json (100%) rename examples/_static/{multiscales_strict => multiscales}/multiscales_reference_to_label.json (100%) rename examples/_static/{multiscales_strict => multiscales}/multiscales_transformations.json (100%) delete mode 100644 examples/_static/multiscales_strict/.config.json rename examples/{ => _static}/plate/.config.json (100%) rename examples/_static/{plate_strict => plate}/plate_2wells.json (100%) rename examples/_static/{plate_strict => plate}/plate_6wells.json (100%) delete mode 100644 examples/_static/plate_strict/.config.json rename examples/{ => _static}/well/.config.json (100%) rename examples/_static/{well_strict => well}/well_2fields.json (100%) rename examples/_static/{well_strict => well}/well_4fields.json (100%) delete mode 100644 examples/_static/well_strict/.config.json delete mode 100644 examples/label/colors_properties.json delete mode 100644 examples/multiscales/multiscales_example.json delete mode 100644 examples/multiscales/multiscales_example_relative.json delete mode 100644 examples/multiscales/multiscales_reference_to_label.json delete mode 100644 examples/multiscales/multiscales_transformations.json delete mode 100644 examples/plate/plate_2wells.json delete mode 100644 examples/plate/plate_6wells.json delete mode 100644 examples/well/well_2fields.json delete mode 100644 examples/well/well_4fields.json diff --git a/examples/label/.config.json b/examples/_static/label/.config.json similarity index 100% rename from examples/label/.config.json rename to examples/_static/label/.config.json diff --git a/examples/_static/label_strict/colors_properties.json b/examples/_static/label/colors_properties.json similarity index 100% rename from examples/_static/label_strict/colors_properties.json rename to examples/_static/label/colors_properties.json diff --git a/examples/_static/label_strict/.config.json b/examples/_static/label_strict/.config.json deleted file mode 100644 index e7329dc9..00000000 --- a/examples/_static/label_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_label.schema" -} diff --git a/examples/multiscales/.config.json b/examples/_static/multiscales/.config.json similarity index 100% rename from examples/multiscales/.config.json rename to examples/_static/multiscales/.config.json diff --git a/examples/_static/multiscales_strict/multiscales_example.json b/examples/_static/multiscales/multiscales_example.json similarity index 100% rename from examples/_static/multiscales_strict/multiscales_example.json rename to examples/_static/multiscales/multiscales_example.json diff --git a/examples/_static/multiscales_strict/multiscales_example_relative.json b/examples/_static/multiscales/multiscales_example_relative.json similarity index 100% rename from examples/_static/multiscales_strict/multiscales_example_relative.json rename to examples/_static/multiscales/multiscales_example_relative.json diff --git a/examples/_static/multiscales_strict/multiscales_reference_to_label.json b/examples/_static/multiscales/multiscales_reference_to_label.json similarity index 100% rename from examples/_static/multiscales_strict/multiscales_reference_to_label.json rename to examples/_static/multiscales/multiscales_reference_to_label.json diff --git a/examples/_static/multiscales_strict/multiscales_transformations.json b/examples/_static/multiscales/multiscales_transformations.json similarity index 100% rename from examples/_static/multiscales_strict/multiscales_transformations.json rename to examples/_static/multiscales/multiscales_transformations.json diff --git a/examples/_static/multiscales_strict/.config.json b/examples/_static/multiscales_strict/.config.json deleted file mode 100644 index b0469538..00000000 --- a/examples/_static/multiscales_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_image.schema" -} diff --git a/examples/plate/.config.json b/examples/_static/plate/.config.json similarity index 100% rename from examples/plate/.config.json rename to examples/_static/plate/.config.json diff --git a/examples/_static/plate_strict/plate_2wells.json b/examples/_static/plate/plate_2wells.json similarity index 100% rename from examples/_static/plate_strict/plate_2wells.json rename to examples/_static/plate/plate_2wells.json diff --git a/examples/_static/plate_strict/plate_6wells.json b/examples/_static/plate/plate_6wells.json similarity index 100% rename from examples/_static/plate_strict/plate_6wells.json rename to examples/_static/plate/plate_6wells.json diff --git a/examples/_static/plate_strict/.config.json b/examples/_static/plate_strict/.config.json deleted file mode 100644 index a49b1743..00000000 --- a/examples/_static/plate_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_plate.schema" -} diff --git a/examples/well/.config.json b/examples/_static/well/.config.json similarity index 100% rename from examples/well/.config.json rename to examples/_static/well/.config.json diff --git a/examples/_static/well_strict/well_2fields.json b/examples/_static/well/well_2fields.json similarity index 100% rename from examples/_static/well_strict/well_2fields.json rename to examples/_static/well/well_2fields.json diff --git a/examples/_static/well_strict/well_4fields.json b/examples/_static/well/well_4fields.json similarity index 100% rename from examples/_static/well_strict/well_4fields.json rename to examples/_static/well/well_4fields.json diff --git a/examples/_static/well_strict/.config.json b/examples/_static/well_strict/.config.json deleted file mode 100644 index 129ac69c..00000000 --- a/examples/_static/well_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_well.schema" -} diff --git a/examples/label/colors_properties.json b/examples/label/colors_properties.json deleted file mode 100644 index c9d5b835..00000000 --- a/examples/label/colors_properties.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - {"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": [0.5, 0.5, 1], - "input": {"path": "s0"}, - "output": {"name": "physical"} - } - ] - } - ] - } - ], - "image-label": { - "colors": [ - { - "label-value": 0, - "rgba": [0, 0, 128, 128] - }, - { - "label-value": 1, - "rgba": [0, 128, 0, 128] - } - ], - "properties": [ - { - "label-value": 0, - "area (pixels)": 1200, - "class": "intercellular space" - }, - { - "label-value": 1, - "area (pixels)": 1650, - "class": "cell", - "cell type": "neuron" - } - ], - "source": { - "image": "../../" - } - } - } - } -} diff --git a/examples/multiscales/multiscales_example.json b/examples/multiscales/multiscales_example.json deleted file mode 100644 index 5a922e01..00000000 --- a/examples/multiscales/multiscales_example.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "multiscales": [ - { - "name": "example", - "coordinateSystems": [ - { - "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": [ - { - // the voxel size for the first scale level (0.5 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level - "type": "scale", - "scale": [0.1, 1.0, 0.5, 0.5, 0.5], - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} - } - ] - }, - { - "path": "s1", - "coordinateTransformations": [ - { - // the voxel size for the second scale level (downscaled by a factor of 2 -> 1 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level - "type": "sequence", - "input": {"path": "s1"}, - "output": {"name": "intrinsic"}, - "transformations": [ - { - "type": "scale", - "scale": [0.1, 1.0, 1.0, 1.0, 1.0] - }, - { - "type": "translation", - "translation": [0, 0, 0.25, 0.25, 0.25] - } - ] - } - ] - }, - { - "path": "s2", - "coordinateTransformations": [ - { - // the voxel size for the third scale level (downscaled by a factor of 4 -> 2 micrometer) - // and the time unit (0.1 milliseconds), which is the same for each scale level - "type": "sequence", - "input": {"path": "s2"}, - "output": {"name": "intrinsic"}, - "transformations": [ - { - "type": "scale", - "scale": [0.1, 1.0, 2.0, 2.0, 2.0] - }, - { - "type": "translation", - "translation": [0, 0, 0.75, 0.75, 0.75] - } - ] - } - ] - } - ], - "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 } - } - } - ] - } - } -} \ No newline at end of file diff --git a/examples/multiscales/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json deleted file mode 100644 index 0ceddc15..00000000 --- a/examples/multiscales/multiscales_example_relative.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "multiscales": [ - { - "version": "{{ VERSION }}", - "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", - // the transformation of other arrays are - // defined relative to this, the highest resolution, array - "coordinateTransformations": [{ - "type": "scale", - "scale": [1, 1, 1, 1, 1], - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} - }] - }, - { - "path": "s1", - "coordinateTransformations": [ - { - // the second scale level (downscaled by a factor of 2 relative to "s0" in zyx) - "type": "sequence", - "input" : {"path": "s1"}, - "output" : {"name": "intrinsic"}, - "transformations": [ - { - "type": "scale", - "scale": [1, 1, 2, 2, 2] - }, - { - "type": "translation", - "translation": [0, 0, 0.5, 0.5, 0.5] - } - ] - } - ] - }, - { - "path": "s2", - "coordinateTransformations": [{ - // the third scale level (downscaled by a factor of 4 relative to "s0" in zyx) - "type": "sequence", - "input" : {"path": "s2"}, - "output" : {"name": "intrinsic"}, - "transformations": [ - { - "type": "scale", - "scale": [1, 1, 4, 4, 4] - }, - { - "type": "translation", - "translation": [0, 0, 1.5, 1.5, 1.5] - } - ] - }] - } - ], - "coordinateTransformations": [ - { - "name": "additional_translation", - "type": "translation", - "translation": [0, 0, 10, 20, 30], - "input": {"name": "intrinsic"}, - "output": {"name": "world"} - } - ] - } - ] -} diff --git a/examples/multiscales/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json deleted file mode 100644 index 307207ec..00000000 --- a/examples/multiscales/multiscales_reference_to_label.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "ome": { - "version": "{{ VERSION }}", - "multiscales": [ - { - "name": "Image", - "datasets": [ - { - "path": "s0", - "coordinateTransformations": [ - { - "type": "scale", - "scale": [0.5, 0.5, 1], - "input": {"path": "s0"}, - "output": {"name": "physical"} - } - ] - } - ], - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - {"name": "z", "type": "space", "unit": "micrometer"}, - {"name": "y", "type": "space", "unit": "micrometer"}, - {"name": "x", "type": "space", "unit": "micrometer"} - ] - } - ], - "coordinateTransformations": [ - { - "type": "identity", - "input": {"path": "labels/cell_segmentation","name": "physical"}, - "output": {"name": "physical"} - } - ] - } - ] - } -} \ No newline at end of file diff --git a/examples/multiscales/multiscales_transformations.json b/examples/multiscales/multiscales_transformations.json deleted file mode 100644 index 50172274..00000000 --- a/examples/multiscales/multiscales_transformations.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "multiscales": [ - { - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "name": "y", - "type": "space", - "unit": "micrometer" - }, - { - "name": "x", - "type": "space", - "unit": "micrometer" - } - ] - }, - { - "name": "intrinsic", - "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": "intrinsic"} - } - ] - } - ], - "coordinateTransformations": [ - { - "scale": [10, 10], - "type": "scale", - "input": {"name": "intrinsic"}, - "output": {"name": "physical"} - } - ], - "name": "image_with_coordinateTransformations", - "type": "foo", - "metadata": { - "key": "value" - } - } - ] - } - } -} diff --git a/examples/plate/plate_2wells.json b/examples/plate/plate_2wells.json deleted file mode 100644 index 8d6fcc4a..00000000 --- a/examples/plate/plate_2wells.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "plate": { - "acquisitions": [ - { - "id": 1, - "maximumfieldcount": 1, - "name": "single acquisition", - "starttime": 1343731272000 - } - ], - "columns": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - }, - { - "name": "4" - }, - { - "name": "5" - }, - { - "name": "6" - }, - { - "name": "7" - }, - { - "name": "8" - }, - { - "name": "9" - }, - { - "name": "10" - }, - { - "name": "11" - }, - { - "name": "12" - } - ], - "field_count": 1, - "name": "sparse test", - "rows": [ - { - "name": "A" - }, - { - "name": "B" - }, - { - "name": "C" - }, - { - "name": "D" - }, - { - "name": "E" - }, - { - "name": "F" - }, - { - "name": "G" - }, - { - "name": "H" - } - ], - "wells": [ - { - "path": "C/5", - "rowIndex": 2, - "columnIndex": 4 - }, - { - "path": "D/7", - "rowIndex": 3, - "columnIndex": 6 - } - ] - } - } - } -} diff --git a/examples/plate/plate_6wells.json b/examples/plate/plate_6wells.json deleted file mode 100644 index 181da381..00000000 --- a/examples/plate/plate_6wells.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "plate": { - "acquisitions": [ - { - "id": 1, - "maximumfieldcount": 2, - "name": "Meas_01(2012-07-31_10-41-12)", - "starttime": 1343731272000 - }, - { - "id": 2, - "maximumfieldcount": 2, - "name": "Meas_02(201207-31_11-56-41)", - "starttime": 1343735801000 - } - ], - "columns": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - } - ], - "field_count": 4, - "name": "test", - "rows": [ - { - "name": "A" - }, - { - "name": "B" - } - ], - "wells": [ - { - "path": "A/1", - "rowIndex": 0, - "columnIndex": 0 - }, - { - "path": "A/2", - "rowIndex": 0, - "columnIndex": 1 - }, - { - "path": "A/3", - "rowIndex": 0, - "columnIndex": 2 - }, - { - "path": "B/1", - "rowIndex": 1, - "columnIndex": 0 - }, - { - "path": "B/2", - "rowIndex": 1, - "columnIndex": 1 - }, - { - "path": "B/3", - "rowIndex": 1, - "columnIndex": 2 - } - ] - } - } - } -} diff --git a/examples/well/well_2fields.json b/examples/well/well_2fields.json deleted file mode 100644 index 763f5b50..00000000 --- a/examples/well/well_2fields.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "well": { - "images": [ - { - "acquisition": 0, - "path": "0" - }, - { - "acquisition": 3, - "path": "1" - } - ] - } - } - } -} diff --git a/examples/well/well_4fields.json b/examples/well/well_4fields.json deleted file mode 100644 index 7a80782a..00000000 --- a/examples/well/well_4fields.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "zarr_format": 3, - "node_type": "group", - "attributes": { - "ome": { - "version": "{{ VERSION }}", - "well": { - "images": [ - { - "acquisition": 1, - "path": "0" - }, - { - "acquisition": 1, - "path": "1" - }, - { - "acquisition": 2, - "path": "2" - }, - { - "acquisition": 2, - "path": "3" - } - ] - } - } - } -} From dca429f873a6db2e5af79da78418b088db22ccfb Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 24 Aug 2026 11:59:30 +0200 Subject: [PATCH 27/28] docs: update references to non-strict examples from _build --- index.md | 42 +++++++----------------------------------- 1 file changed, 7 insertions(+), 35 deletions(-) diff --git a/index.md b/index.md index aa817a43..7ea81a08 100644 --- a/index.md +++ b/index.md @@ -1407,11 +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: -<<<<<<< HEAD -```{literalinclude} examples/_build/multiscales_strict/multiscales_example.json -======= -```{literalinclude} examples/multiscales/multiscales_example.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/multiscales/multiscales_example.json :language: json ``` ::: @@ -1570,11 +1566,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: -<<<<<<< HEAD -```{literalinclude} examples/_build/multiscales_strict/multiscale_reference_to_label.json -======= -```{literalinclude} examples/multiscales/multiscale_reference_to_label.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/multiscales/multiscale_reference_to_label.json :language: json ``` @@ -1598,11 +1590,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: -<<<<<<< HEAD -```{literalinclude} examples/_build/label_strict/colors_properties.json -======= -```{literalinclude} examples/label/colors_properties.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/label/colors_properties.json :language: json ``` @@ -1681,22 +1669,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. -<<<<<<< HEAD -```{literalinclude} examples/_build/plate_strict/plate_6wells.json -======= -```{literalinclude} examples/plate/plate_6wells.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/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. -<<<<<<< HEAD -```{literalinclude} examples/_build/plate_strict/plate_2wells.json -======= -```{literalinclude} examples/plate/plate_2wells.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/plate/plate_2wells.json :language: json ``` ::: @@ -1725,22 +1705,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. -<<<<<<< HEAD -```{literalinclude} examples/_build/well_strict/well_4fields.json -======= -```{literalinclude} examples/well/well_4fields.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/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. -<<<<<<< HEAD -```{literalinclude} examples/_build/well_strict/well_2fields.json -======= -```{literalinclude} examples/well/well_2fields.json ->>>>>>> rm-strict2 +```{literalinclude} examples/_build/well/well_2fields.json :language: json ``` ::: From 51bcb3211fa07a726182775e8d77e1955f0164ea Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Mon, 24 Aug 2026 12:09:31 +0200 Subject: [PATCH 28/28] docs: update links to built docs --- index.md | 2 +- myst.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 7ea81a08..904cf5b7 100644 --- a/index.md +++ b/index.md @@ -1566,7 +1566,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/_build/multiscales/multiscale_reference_to_label.json +```{literalinclude} examples/_build/multiscales/multiscales_reference_to_label.json :language: json ``` diff --git a/myst.yml b/myst.yml index 3e0e41a9..310cbc92 100644 --- a/myst.yml +++ b/myst.yml @@ -97,7 +97,7 @@ project: - file: index.md - file: examples/index.md children: - - pattern: examples/**/*.md + - pattern: examples/_build/**/*.md - file: schemas/index.md children: - pattern: schemas/*.md