From d4b2c1dc35e8affa4667d558599c46ecd812dcff Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 14 Aug 2026 23:00:19 +0200 Subject: [PATCH 01/79] fix: allow 0.6 as version in 0.6rc1 feat: no future 0.6rc1 without version bump feat: update schema store URL feat: use correct schema keys feat: list current version first feat: allow future 0.6rc1 as verion --- schemas/_version.schema | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schemas/_version.schema b/schemas/_version.schema index a5f079a6..9bd60959 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -5,6 +5,7 @@ "description": "OME-Zarr version.", "type": "string", "enum": [ - "0.6rc0" + "0.6rc0", + "0.6" ] } From 5e521cfec19a784997b993dc71f72e05763335c9 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Fri, 14 Aug 2026 23:00:19 +0200 Subject: [PATCH 02/79] fix: allow 0.6 as version in 0.6rc1 feat: no future 0.6rc1 without version bump feat: update schema store URL feat: use correct schema keys feat: list current version first feat: allow future 0.6rc1 as verion --- schemas/_version.schema | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schemas/_version.schema b/schemas/_version.schema index a5f079a6..9bd60959 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -5,6 +5,7 @@ "description": "OME-Zarr version.", "type": "string", "enum": [ - "0.6rc0" + "0.6rc0", + "0.6" ] } From 8eafab817625e424389db42ef09b353481b0097a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 11 Aug 2026 10:45:48 +0100 Subject: [PATCH 03/79] Consolidate codespell config in pyproject.toml Also, skip .venv/, .tox/, _build/, and css files --- .codespellrc | 6 ------ pyproject.toml | 4 +++- 2 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 .codespellrc diff --git a/.codespellrc b/.codespellrc deleted file mode 100644 index 98a102d6..00000000 --- a/.codespellrc +++ /dev/null @@ -1,6 +0,0 @@ -[codespell] -# Ref: https://github.com/codespell-project/codespell#using-a-config-file -skip = .git,.codespellrc,references.bib -check-hidden = true -# ignore-regex = -ignore-words-list = commend,Fuchsia diff --git a/pyproject.toml b/pyproject.toml index 71c7328a..3e90d0ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,8 @@ testing = [ [tool.codespell] ignore-regex = '\bComparin\b' +skip = ".git,.codespellrc,references.bib,.venv,.tox,*.css,_build" +ignore-words-list = "commend,Fuchsia" [tool.hatch.version] path = "_version.py" @@ -30,4 +32,4 @@ packages = ["."] [build-system] requires = ["hatchling>=1.8.0,<1.21.1"] -build-backend = "hatchling.build" \ No newline at end of file +build-backend = "hatchling.build" From 9ca5e53a325a28cde3787c23b41b97e61820d921 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 11 Aug 2026 11:17:31 +0100 Subject: [PATCH 04/79] Add dev commands to justfile --- README.md | 5 + justfile | 19 + uv.lock | 2160 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2184 insertions(+) create mode 100644 justfile create mode 100644 uv.lock diff --git a/README.md b/README.md index 9147dbb8..4543619b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ as well as [json schemas](./schemas) to validate written ome-zarr image data. The built documentation including contribution hints can be found **[here](https://ngff-spec.readthedocs.io/en/latest/)**. +## Development + +Use [`just`](https://github.com/casey/just) for common development tasks like building, linting, testing. +Run `just` to see a list of commands. + ## Conformance tests Conformance can be tested at several levels. diff --git a/justfile b/justfile new file mode 100644 index 00000000..69c22891 --- /dev/null +++ b/justfile @@ -0,0 +1,19 @@ +_: + just --list + +# Build the specification in the _build/ directory. +build: + uv run python pre_build.py + uv run jupyter book build --html --ci + +# Check spelling in the source files; +# configured in pyproject.toml. +spell: + uv run codespell + +# Run all lint commands. +lint: spell + +# Run schema tests. +test: + uv run tox diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..4ba1ecaf --- /dev/null +++ b/uv.lock @@ -0,0 +1,2160 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.11' and python_full_version < '3.14'", + "python_full_version < '3.11'", +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706, upload-time = "2025-06-03T06:55:32.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657, upload-time = "2025-06-03T06:55:30.804Z" }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393, upload-time = "2025-07-30T10:01:40.97Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328, upload-time = "2025-07-30T10:01:41.916Z" }, + { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269, upload-time = "2025-07-30T10:01:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558, upload-time = "2025-07-30T10:01:43.943Z" }, + { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364, upload-time = "2025-07-30T10:01:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637, upload-time = "2025-07-30T10:01:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934, upload-time = "2025-07-30T10:01:47.203Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158, upload-time = "2025-07-30T10:01:48.341Z" }, + { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597, upload-time = "2025-07-30T10:01:49.112Z" }, + { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231, upload-time = "2025-07-30T10:01:49.92Z" }, + { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121, upload-time = "2025-07-30T10:01:50.815Z" }, + { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177, upload-time = "2025-07-30T10:01:51.681Z" }, + { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090, upload-time = "2025-07-30T10:01:53.184Z" }, + { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246, upload-time = "2025-07-30T10:01:54.145Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126, upload-time = "2025-07-30T10:01:55.074Z" }, + { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343, upload-time = "2025-07-30T10:01:56.007Z" }, + { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777, upload-time = "2025-07-30T10:01:56.943Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180, upload-time = "2025-07-30T10:01:57.759Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715, upload-time = "2025-07-30T10:01:58.56Z" }, + { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149, upload-time = "2025-07-30T10:01:59.329Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/ba4e4ca8d149f8dcc0d952ac0967089e1d759c7e5fcf0865a317eb680fbb/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6dca33a9859abf613e22733131fc9194091c1fa7cb3e131c143056b4856aa47e", size = 24549, upload-time = "2025-07-30T10:02:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/5c/82/9b2386cc75ac0bd3210e12a44bfc7fd1632065ed8b80d573036eecb10442/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:21378b40e1b8d1655dd5310c84a40fc19a9aa5e6366e835ceb8576bf0fea716d", size = 25539, upload-time = "2025-07-30T10:02:00.929Z" }, + { url = "https://files.pythonhosted.org/packages/31/db/740de99a37aa727623730c90d92c22c9e12585b3c98c54b7960f7810289f/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d588dec224e2a83edbdc785a5e6f3c6cd736f46bfd4b441bbb5aa1f5085e584", size = 28467, upload-time = "2025-07-30T10:02:02.08Z" }, + { url = "https://files.pythonhosted.org/packages/71/7a/47c4509ea18d755f44e2b92b7178914f0c113946d11e16e626df8eaa2b0b/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5acb4e41090d53f17ca1110c3427f0a130f944b896fc8c83973219c97f57b690", size = 27355, upload-time = "2025-07-30T10:02:02.867Z" }, + { url = "https://files.pythonhosted.org/packages/ee/82/82745642d3c46e7cea25e1885b014b033f4693346ce46b7f47483cf5d448/argon2_cffi_bindings-25.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:da0c79c23a63723aa5d782250fbf51b768abca630285262fb5144ba5ae01e520", size = 29187, upload-time = "2025-07-30T10:02:03.674Z" }, +] + +[[package]] +name = "arrow" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931, upload-time = "2025-10-18T17:46:46.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797, upload-time = "2025-10-18T17:46:45.663Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, +] + +[[package]] +name = "bleach" +version = "6.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "cachetools" +version = "7.1.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/d2/47e8bc06fe2a06d3f5bdf20f1126ab66c4e99dc48d940e7ba873f7ac7131/cachetools-7.1.7.tar.gz", hash = "sha256:a3e2a00b14d8f8a6b70c1dae7b4685e7ad3bc965c5b42124a2d6ce895da6cf50", size = 40680, upload-time = "2026-08-01T21:20:40.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d8/767faeda872075724b95dd675466a645f1b92aadcdcf2d1429dcfd76c176/cachetools-7.1.7-py3-none-any.whl", hash = "sha256:ef98ef375ad188819ef2f9b3645e3987f4b8c5b7550e436ad998c2de78296df0", size = 16830, upload-time = "2026-08-01T21:20:38.977Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/d2/2cde336b375f55c76ca670f0be3978cc048e31e24f3b4d7ce8473150a388/cffi-2.1.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be", size = 183779, upload-time = "2026-08-03T21:19:15.602Z" }, + { url = "https://files.pythonhosted.org/packages/94/1a/4b2f7c92293ba05cbd4a9a1b28faaf0326272d9488e6354657571c48a7aa/cffi-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b", size = 184178, upload-time = "2026-08-03T21:19:16.67Z" }, + { url = "https://files.pythonhosted.org/packages/17/0b/ba385d8ccedf926c3cd06e8e2f327027da5afe5f0eb30f1f7bc43ac55125/cffi-2.1.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004", size = 211037, upload-time = "2026-08-03T21:19:17.705Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b9/0f2e58b2cefa33255bff36935d42b13180fe559bba82596540eb404bde7d/cffi-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9", size = 218652, upload-time = "2026-08-03T21:19:18.735Z" }, + { url = "https://files.pythonhosted.org/packages/37/15/180e0dab27b9312c7479003d14c9e547634b7dcb934e2cc4650e1b131a7a/cffi-2.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98", size = 205422, upload-time = "2026-08-03T21:19:19.96Z" }, + { url = "https://files.pythonhosted.org/packages/18/d4/03026f0c850cbbaa9030750490225b4a7f4d524ea4df72c3cc740a90f4ef/cffi-2.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9", size = 205444, upload-time = "2026-08-03T21:19:21.246Z" }, + { url = "https://files.pythonhosted.org/packages/75/77/60bebf6f818bec84210ac5b6979ce4eeadce6fbbaabc9c7ab23e506d1ce5/cffi-2.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6", size = 218742, upload-time = "2026-08-03T21:19:22.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ae/679bf47e73fd77b352171727f07de559a003f14de5d02b904a6ec1fa73ca/cffi-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf", size = 221054, upload-time = "2026-08-03T21:19:23.694Z" }, + { url = "https://files.pythonhosted.org/packages/09/b8/eefc0e06913b70aa153bf74c946094a18f58fd4aff11b7f372bfdfdca050/cffi-2.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659", size = 213489, upload-time = "2026-08-03T21:19:24.922Z" }, + { url = "https://files.pythonhosted.org/packages/6f/13/4e56852824a03cdf68523a35686f1c28eacd4bd30a7b0a78e682e6e6e1d3/cffi-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9", size = 220241, upload-time = "2026-08-03T21:19:26.214Z" }, + { url = "https://files.pythonhosted.org/packages/99/7f/040f9e163e4acac3ee3d85b02d00b2576e7ca980d8785f0a3a5f1a9bf7f5/cffi-2.1.1-cp310-cp310-win32.whl", hash = "sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41", size = 174578, upload-time = "2026-08-03T21:19:27.338Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0b/644a2ec1a4eaba49c2939410bb1eb1d25b09d6d0582f5d2f95c537043725/cffi-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1", size = 185082, upload-time = "2026-08-03T21:19:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +] + +[[package]] +name = "chardet" +version = "7.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/7c/c9cf52695364a0609829ccc9e88adea553587ef70349314f29ed1b62bcff/chardet-7.5.1.tar.gz", hash = "sha256:0df08f2b2f6ac04b3e7f9e8ad1b1559c2e8497338ff9dfa1e0922335ff9dfe8d", size = 837498, upload-time = "2026-08-06T05:02:11.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/c3/12e838956015a4c3d4cf6af1ea843fddd0854e43e03d69d13897133ac845/chardet-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:951ccab3a037a563079f4d448e82bbfee5f2715239440f732ffb0ac9f251dedb", size = 938086, upload-time = "2026-08-06T05:01:14.135Z" }, + { url = "https://files.pythonhosted.org/packages/da/6e/9a9c51f5d8b918c3e1ece93ce0369ca34768044749208058659095de9d78/chardet-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f22396ad419f1e78594057e200aa7253be56840f5b04d07b86ccecd99e09c068", size = 923958, upload-time = "2026-08-06T05:01:16.124Z" }, + { url = "https://files.pythonhosted.org/packages/92/2f/0ed2206d6efbd1cd4888e83ee9f8a0a2f89893bd750c987cd8bea8245a2f/chardet-7.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:126b2a65141ed8a460c721d19f487c7b6fd12542aa761ce449f543296d0dd71e", size = 948644, upload-time = "2026-08-06T05:01:17.885Z" }, + { url = "https://files.pythonhosted.org/packages/03/8e/47ded9c693655501231a001dba9a1319d1c89010a772b7752aa69ce8ca0c/chardet-7.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b1c049906b95db7b12fd674f661f75285baf925eae98aa52a4a09305fc786855", size = 959375, upload-time = "2026-08-06T05:01:19.371Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e4/714cfd3de9e34964f4c8fe85fe929ef2a9d889bd908d5cdc822ecee3a1cd/chardet-7.5.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:61312fd3ff363c3ec549548250630a02fd3123c360dd492bf1fce0d28e915b87", size = 952712, upload-time = "2026-08-06T05:01:21.477Z" }, + { url = "https://files.pythonhosted.org/packages/27/15/e82da34603cda9962fa4627a8d89f11d808c2b616d58138416c78277f05c/chardet-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:5953d8236049aed0411908cfeaeeec03984ab2f109f980f0ec70fbe6938c8f9e", size = 1035569, upload-time = "2026-08-06T05:01:22.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e9/86ebd066a78fc3c1c368e6448eee363e596e5e4b802460566af40e09dbbb/chardet-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e72489029c1f6e4be6138dd045a4e52bffaba5d5da0398df585bfcf8b239e324", size = 934119, upload-time = "2026-08-06T05:01:24.668Z" }, + { url = "https://files.pythonhosted.org/packages/79/89/d683635b8da75762c4c7c1978cbe374bb0e03c236b97124c8913b0010290/chardet-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6df2e255413c5f277067d9af7444ab1e9719126335efbefae24d8370aedf35c5", size = 920018, upload-time = "2026-08-06T05:01:26.318Z" }, + { url = "https://files.pythonhosted.org/packages/82/08/7d2cf6856455588aad4f92f1efc8dcab6850a2cb20629ac57214cd8fb693/chardet-7.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d06a8bacc8b6a26e900c3bd825601f9a8c02e063e687e960cf77363a9a397a0b", size = 944717, upload-time = "2026-08-06T05:01:27.811Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8c/8120efdadbf8a54f3bb4892ce6051be055eab7cedd7f85ed389f47c59299/chardet-7.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a599a836fbd41ff5a2a0c20e211da13ba8cc14dcba1e4bcfad8a7bcad64a2ff6", size = 954791, upload-time = "2026-08-06T05:01:29.348Z" }, + { url = "https://files.pythonhosted.org/packages/c5/28/e8df108688d80ac4e983c489fa6ddf14899b8513e3c93d6909c7de60245a/chardet-7.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bbf6948b7a5b85af5e435993c4e5fdb092d0d8f38c00d68c96e2640bafce5ec2", size = 945934, upload-time = "2026-08-06T05:01:30.77Z" }, + { url = "https://files.pythonhosted.org/packages/ea/21/4b8782d18fbec3b12a57fe9e5fcf252edbaefbe9386bc4a1620b7872d43d/chardet-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:a77d6d2d61f39b40423bd0abaee32175739cec9f11edf9e7236a5341d0e05c99", size = 1034222, upload-time = "2026-08-06T05:01:32.468Z" }, + { url = "https://files.pythonhosted.org/packages/29/95/60f047ece9faf585d6f625adea8786bb15a453fbf183e77a5762c8755c86/chardet-7.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3eb37b2c0aa67bfb1112aa90bfdd95cd3b4006fe051a2ea4872c3c6ba9cf855b", size = 939537, upload-time = "2026-08-06T05:01:34.127Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8e/847935c588455b0d82fa57a5a8ced4c73a928e30f2012639228e566e3283/chardet-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a001a8f030625b705d9a4e68116e573462bd38192cc6c1bfa318b45606747ac", size = 922039, upload-time = "2026-08-06T05:01:35.929Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9f/841f7d9f1ff7b99ef2a7e7596b14199dbfe289a11b39c7f98cfb23d0c55a/chardet-7.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54bae16fc5b7ea39956ee737dd09b5f5438deafa9f565ac27c882992c3965b88", size = 945557, upload-time = "2026-08-06T05:01:37.696Z" }, + { url = "https://files.pythonhosted.org/packages/10/56/89866e9995fdb2c8e8ff1336c4ecd4c86ba0f7e4622ccfacad2c13b2ba7e/chardet-7.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecbe0e0a9fff7825fc48650ef297ede49c71a7abc411a0638416207a70bf78c0", size = 961089, upload-time = "2026-08-06T05:01:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/1b/fe/f568f20d0cea7f853769d3015915daf8bb8460a4265237a051bb374fdcd0/chardet-7.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:469f164a608ccee4a8a2c0c2b4328470df9b07443e8269714f8e8a51f6fdf4c4", size = 950289, upload-time = "2026-08-06T05:01:40.782Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9a/9e17c1c6fbc65f9cba07951d359a24c8f7b17d3ca26bd54f33fd98b70f2e/chardet-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:fad6fbc154113e3b17bb757c34b21477e4b6d69fdd4ce51ff2b3f29a42f08b5b", size = 1036514, upload-time = "2026-08-06T05:01:42.394Z" }, + { url = "https://files.pythonhosted.org/packages/53/3d/3aed10edee5735bc92cf0bd1a469335f596331b3ffc82bbdd157f8d5135f/chardet-7.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b72b9b95c636d170d9a6284d99be9fd93ca08bb2221385ff1a5b69da98ec4f76", size = 935215, upload-time = "2026-08-06T05:01:44.082Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e9/bd883f6ed3cb53a66b6752da493ef4b82f6435e7c085e0eee21296a0a31c/chardet-7.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d30a84ec52c37532ad7978329a41224c454959b22503b8f8ed4df763e6c3ed2", size = 917514, upload-time = "2026-08-06T05:01:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/ea/d2/1773383d05a6cc1a69ee075cf477942edbb00c90bf8ac9778bce884e4c0a/chardet-7.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6faa6b18c7af2fca8d4cbb51fa035fa47f8f4b68547ae927a1c0be34dfc96fa", size = 944654, upload-time = "2026-08-06T05:01:48.01Z" }, + { url = "https://files.pythonhosted.org/packages/05/c2/9e5200bd6f8c6a32d0f2bbb6235783b3ca421630cb4f18507d5c9edc07ac/chardet-7.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36843a0e9e3196142e317806d5ca29ab0bb714de2315897124a018438cc535a3", size = 959589, upload-time = "2026-08-06T05:01:49.512Z" }, + { url = "https://files.pythonhosted.org/packages/11/b7/1e49d101a790501e540f9d9b33e52a65ccfcc0c0748220cb3ffb44987823/chardet-7.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:59598a8e15769ebe62fd0c153a5e4347a7a126cc7b376a724ff63ad80b890506", size = 949138, upload-time = "2026-08-06T05:01:50.993Z" }, + { url = "https://files.pythonhosted.org/packages/88/d4/ed3b7e5c882ba24b71df8554840898ebbbbc3a57844d218edd4a1f8770a4/chardet-7.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:71f152d66e7bd1faad615897d34765243cb567ad6aef07bf0d7c0cdd69bf6cce", size = 1034753, upload-time = "2026-08-06T05:01:52.488Z" }, + { url = "https://files.pythonhosted.org/packages/68/04/71d601ad6b13b30921c7c0e085aec44b152df206bef45b164988d4ea143b/chardet-7.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a6b20b42a9e6048d557aec9903df33239c299b4643c6553203127c8f92f47e78", size = 934245, upload-time = "2026-08-06T05:01:54.06Z" }, + { url = "https://files.pythonhosted.org/packages/85/84/5690a64afecf9967c3844ec96842d549e6f3ef72009bfd5524b69111245a/chardet-7.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6eefafa763b7099c3c0a86c343097d69b766b3fe5705edba9400bae26450af1f", size = 917122, upload-time = "2026-08-06T05:01:55.526Z" }, + { url = "https://files.pythonhosted.org/packages/bf/7b/df208823a1c53aa765caa4511479a7182399a397fb247aa30e0adccdd1a0/chardet-7.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c99dea9eea1bdc6cc20dcb3555581234899d58a4147163c7d03d8fca11402b0", size = 947091, upload-time = "2026-08-06T05:01:56.995Z" }, + { url = "https://files.pythonhosted.org/packages/76/bb/32871c9e393f174a60930a29873b6a4217b3f1c65667cad303ef146caedc/chardet-7.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c378ccd8c0fab30171ed7c54d501f72c4294d9b98c71ea1ff7852aa9ccac399", size = 959741, upload-time = "2026-08-06T05:01:58.525Z" }, + { url = "https://files.pythonhosted.org/packages/85/69/cd0f5a176ed50787a9f143dd79a6a2cb47ce30cc1b164c76445bf3d971ea/chardet-7.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1cd58589a52211901c5ac57016feffbe8a7e7e6328f5bf0b03ce44043e221e99", size = 950265, upload-time = "2026-08-06T05:01:59.962Z" }, + { url = "https://files.pythonhosted.org/packages/e9/8f/d871b357287caae0483d2cd235fae476da3768dd7d56e1fe733ffd3f707c/chardet-7.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:46d10bbb7ba7ba345694fe0276a61290d4cc25d3624c03282311dbc58c1d49b4", size = 1032664, upload-time = "2026-08-06T05:02:01.415Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f9/746f0b494b2a08e694e4f97259979dce9f16740f0c624abcc76e9d2642c0/chardet-7.5.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a198d47eaa28e1ba458f11ab636f0677f34c5d1ce7e909bec6ca2f346c21e78c", size = 954309, upload-time = "2026-08-06T05:02:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/de/60/41497afb2f225cc0c8cd731b34ee0f7bd5a85ab76547035f22b0326c0342/chardet-7.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:44214df32ff7c87fe82d7f1f21c7fe95c04769869e523f944413e668e001f52c", size = 935936, upload-time = "2026-08-06T05:02:04.921Z" }, + { url = "https://files.pythonhosted.org/packages/78/eb/d69d9013a67de60fc71da55d8cd6b25efdeaba0b0f4f9ae655fb71d82604/chardet-7.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c461fc9746912d19ab77efc1912b7f9a364b7fca1d787e1215207d5f6f68685d", size = 963210, upload-time = "2026-08-06T05:02:06.855Z" }, + { url = "https://files.pythonhosted.org/packages/58/21/eaa124a4a7beb8bc4df5e7a4df78021c09b2e5d68fbf66a24544228e583b/chardet-7.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26160da949c66f0cca280101d85e6e4fddca53bfe465a1b69ceb3c9998295cc0", size = 975809, upload-time = "2026-08-06T05:02:08.497Z" }, + { url = "https://files.pythonhosted.org/packages/36/6b/f195e0d66b1e18ccbcc3adc52c1c7e1263203e70b9bbe12c5a4198d1935b/chardet-7.5.1-py3-none-any.whl", hash = "sha256:ba7e9b6c15b4fcdf07ae675e5116dee610425f9ad6955c9bdb6bf99aed2e555d", size = 655022, upload-time = "2026-08-06T05:02:10.071Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a", size = 322240, upload-time = "2026-07-07T14:32:36.236Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/b4319dc3229d8272fba305e206fc0a148e2de8d4087917ce62ae6382f359/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa99adc8f081b475a12843953db36831eaf83ec33eb46a90629ca6a5de45a616", size = 216475, upload-time = "2026-07-07T14:32:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/6c99c1b3e6b8bf730e1bc809b9a2608f224145069114c479a2e9e1494346/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1225416b463483160e4af85d5fc3a9690ccb53fd4b1865a6437825f5ede3209", size = 238670, upload-time = "2026-07-07T14:32:39.658Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f4/ffbb83546e1f198ecc70ecd372b65cf2b50f9068b380abd67640f17a8e18/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d10d789dd9bcca1173c95af82c58433122564b7bc39385124be735a35cbe99", size = 233476, upload-time = "2026-07-07T14:32:41.155Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8", size = 223817, upload-time = "2026-07-07T14:32:42.592Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/a276bb2e66243072a3fd06fdcab9cbb61a305b02143d70d2bda21d888fa8/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bcf74c1df76758a395bf0af608c04c82257523f55c9868b334f06270d0f2112b", size = 207974, upload-time = "2026-07-07T14:32:44.258Z" }, + { url = "https://files.pythonhosted.org/packages/5e/be/7ee4453d7e88dfbc4104ccd34900b9f2c7c17dac22881865fe0e82424a25/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b5314963fce9b0b12743891de876e724997864ee22aa496f903f426c7e2fa5b2", size = 221655, upload-time = "2026-07-07T14:32:45.64Z" }, + { url = "https://files.pythonhosted.org/packages/1d/85/181c652953eb5276d198f375b1dd641047392050098100a3a02d6534f657/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9701d0049d92c16703a42771b98d560b95248949f23f8cf7b4eddd201814fb9", size = 219229, upload-time = "2026-07-07T14:32:47.376Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/aaf6da33fc9f4691cda8f7efbc9f69179d3d39ec8a4799baf273ee1d8db0/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:65a7ff3f705e57d392f7261b6d0550fe137c3019477431f1c355e0db0a7d3e15", size = 209704, upload-time = "2026-07-07T14:32:48.855Z" }, + { url = "https://files.pythonhosted.org/packages/63/01/f2fb3bd3a73be48b173ee0c6aa8d2497af97d5663a8c4c4b491de4c62f7a/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79580094b00d1789d1f93ea55bc43cb2f611910c72235b7657f3482ddcc1b22d", size = 226243, upload-time = "2026-07-07T14:32:50.239Z" }, + { url = "https://files.pythonhosted.org/packages/c4/02/c57a22739fe05246b0b5783b3bfb6afaac4eebb46f3ececdfb2f048f780e/charset_normalizer-3.4.9-cp310-cp310-win32.whl", hash = "sha256:432786d3561e69aeeae6c7e8648964ce0ad05736120135601f87ac26b9c83381", size = 150935, upload-time = "2026-07-07T14:32:51.676Z" }, + { url = "https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee", size = 162314, upload-time = "2026-07-07T14:32:53.193Z" }, + { url = "https://files.pythonhosted.org/packages/01/da/a44bd7a13d426e69e4894557106cd58669097bfad4a8681123b618fbfc5d/charset_normalizer-3.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:375b83ed0aecfce76c16d198fbc21f3b11b337d68662bea0a995046682a11419", size = 153075, upload-time = "2026-07-07T14:32:54.554Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "dataclasses-json" +version = "0.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "marshmallow" }, + { name = "typing-inspect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227, upload-time = "2024-06-09T16:20:19.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686, upload-time = "2024-06-09T16:20:16.715Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/f3/6b1d4c71f4cbb5360009f928934a03b42906f28fc7b3f7f35f04e58acead/debugpy-1.8.21-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8eeab7b5462f683452c57c0126aaa5ec4e974ddb705f39ba87dff8818c8e08f9", size = 2113873, upload-time = "2026-06-01T19:30:37.148Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f2/17c3bf91cebc173bfbf5734cd2669723d0a35c0cf9d2fd2124546efeae83/debugpy-1.8.21-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:0fddfdc130ac6d8bfc0415b0409822fa901c8f310e5c945ac5653a0352532344", size = 3004715, upload-time = "2026-06-01T19:30:38.888Z" }, + { url = "https://files.pythonhosted.org/packages/5a/22/1f8efd80c7b5909e760f9cfd0c9e8681d2d35d532f7c0a40760cd4da4a19/debugpy-1.8.21-cp310-cp310-win32.whl", hash = "sha256:72b5d676c4cbfac3bac5bb01c138a4656e843f93f03ce2a5f4e394ad49fbee73", size = 5303455, upload-time = "2026-06-01T19:30:40.52Z" }, + { url = "https://files.pythonhosted.org/packages/da/ce/54c79abd6cccef92fa7b43d97e3acafedf4d645557267ece05e948b5e4b8/debugpy-1.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a7fe47fd23da57b9e0bec3f4a8ee65a2dc55782455ed7f2141d75ab5d2eaeef5", size = 5331751, upload-time = "2026-06-01T19:30:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/cbf306d6e07a313a91e7171a98669054502840931432c227cfd505ee367f/debugpy-1.8.21-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:da456226c7b4c69e35dbe35dcee6623d912000a77816db7856a41af1c72a0264", size = 2203120, upload-time = "2026-06-01T19:30:43.964Z" }, + { url = "https://files.pythonhosted.org/packages/aa/57/aa739bd4ad2cbf96aeb1b20b56918ddd5ae4c28b68709bfcd327f02123ee/debugpy-1.8.21-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:f68b891688e61bdc08b8d364d919ff0051e0b94657b39dcd027bc3173edb7cdc", size = 3059958, upload-time = "2026-06-01T19:30:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/a8/31/453d2c9a23d133fe2c8ec7ca1d816ded52a913487fe3ffef7c01b4b706af/debugpy-1.8.21-cp311-cp311-win32.whl", hash = "sha256:f843a8b08c2edeaf9b1582eed4f25441af21a297c22ff16bf76a662557aa9c9e", size = 5236515, upload-time = "2026-06-01T19:30:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/60/94/6660de2f2d7bf388f229335ba4637646eebabdbf38564cb439a95a9193c9/debugpy-1.8.21-cp311-cp311-win_amd64.whl", hash = "sha256:84c564d8cc701d41843b29a92814c1f1bef6798724ca9d675c284ad9f6a547d7", size = 5256138, upload-time = "2026-06-01T19:30:49.113Z" }, + { url = "https://files.pythonhosted.org/packages/a2/df/bf625547431a9cadc9f4cbfeda38866e2b17f6aed147b625377e87834449/debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e", size = 2483609, upload-time = "2026-06-01T19:30:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/59324b903599031ff9faaec1758292409f6561a0ec2492fe4b703327705a/debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176", size = 3968900, upload-time = "2026-06-01T19:30:52.341Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/27f65b805d7fe005c44e1a36b9183ecdfbcdbf9d3e721a5115d461ecc7ee/debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9", size = 5336340, upload-time = "2026-06-01T19:30:54.047Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/c84e30c0c674184948b66f076ab271c01d940618a2824c23cd035a27bc20/debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c", size = 5374751, upload-time = "2026-06-01T19:30:55.891Z" }, + { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" }, + { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" }, + { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3d/f4bbb323a548bfab2af3d6b4ffd9bf22636e55956a1285d317a1de643aad/debugpy-1.8.21-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9bb2a685287a2ac9b181cde89edcec64845cb51de7faaa75badb9a698bc24782", size = 2477209, upload-time = "2026-06-01T19:31:04.157Z" }, + { url = "https://files.pythonhosted.org/packages/8c/2d/6e7ec524984a1702777868de49a4c53202bddac2a432a76a093469587750/debugpy-1.8.21-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3d6922439bf33fd38a3e2c447869ebc7b97da5cd3d329ff1ef9bc06c4903437e", size = 3927115, upload-time = "2026-06-01T19:31:05.863Z" }, + { url = "https://files.pythonhosted.org/packages/97/47/d1aa6d64005a98a9144647d99306b419396f9ad7bf1d73c119e17a81fb4d/debugpy-1.8.21-cp314-cp314-win32.whl", hash = "sha256:15d4963bd5ffa48f0da0947fd06757fa7621945048a14ad7705431566d3c0e7c", size = 5336724, upload-time = "2026-06-01T19:31:07.711Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/b905b90d163af11878c1af8abafa4a25206335e112e284e413454543a6da/debugpy-1.8.21-cp314-cp314-win_amd64.whl", hash = "sha256:fe0744a12353406de0ae8ccff0d0a4a666f00801a3db8fd04e7a5f761cd520e8", size = 5373803, upload-time = "2026-06-01T19:31:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/98/474719c58eddaf77fa443b063693e76d49db32bbe851bcbaf58d2700119f/fastjsonschema-2.22.1.tar.gz", hash = "sha256:0b83d1ce8d7845b959dcb20e1a5c3c8883b6541d9c52ab02cce5166b75ec805f", size = 382291, upload-time = "2026-07-27T13:31:08.515Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/e1/62cc96341f01bdff2ba967441939178fcd1900d11ce7e6554d9954a5d7ec/fastjsonschema-2.22.1-py3-none-any.whl", hash = "sha256:cf377ff5c9a6f4f3125fb35f75a2c5767bd824ffbcf62c209a93cd48d1453999", size = 26239, upload-time = "2026-07-27T13:31:03.251Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015, upload-time = "2021-03-11T07:16:29.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipykernel" +version = "7.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.16.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio2" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, +] + +[[package]] +name = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, +] + +[[package]] +name = "ipython" +version = "9.16.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.11' and python_full_version < '3.14'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/96/b150fe7e25a5a29ae9ac1374e71488639605d39a1ea4abb74c9ce33af235/ipython-9.16.1.tar.gz", hash = "sha256:5a3d1f9a47ff216d6cf9cf863124f6a2c1a198d1354c546a4d24a370a283b64c", size = 4515302, upload-time = "2026-08-03T08:36:15.571Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/8e/1239df488393d61076653bfb29f759d0f60cab8e030abdf7c17c31539b51/ipython-9.16.1-py3-none-any.whl", hash = "sha256:4acae635506f6d352d94c4899a19d5f85f8bc4d230932342dca556fdab1c69b4", size = 625974, upload-time = "2026-08-03T08:36:13.654Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649, upload-time = "2020-11-01T11:00:00.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321, upload-time = "2020-11-01T10:59:58.02Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "json-schema-for-humans" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "dataclasses-json" }, + { name = "jinja2" }, + { name = "markdown2" }, + { name = "pygments" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/4c/83fc5c339cabfc0d14717c843f506ad2e70a197b6f2c139bb7b2a27e368b/json_schema_for_humans-1.5.1.tar.gz", hash = "sha256:a43023f6c1b99f8e75126cc824c22992d8f55e941060aa3fddfc7c38de3cb973", size = 256753, upload-time = "2025-11-21T14:55:54.536Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/97/1e9a730a7d7674d6022e9eaabff9218ba096b310cef712c004854248a64b/json_schema_for_humans-1.5.1-py3-none-any.whl", hash = "sha256:6b5bb65c8ccfb46219352f3da32312c9d904c08790bb96f43f109338c2141478", size = 285017, upload-time = "2025-11-21T14:55:53.26Z" }, +] + +[[package]] +name = "json-with-comments" +version = "1.2.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/6d/638e8adbb2b92bb0803c092dd8ae6482945961c8545fc7e2f21c48233928/json_with_comments-1.2.10.tar.gz", hash = "sha256:0020b321cf6c80963c85f95ce985e71332f1797ed49abfd1cd675b3bdee24a28", size = 6788, upload-time = "2024-12-10T05:46:37.415Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/8a/f67dadb0648f00ac2249d3ef32532f0d5a2e72016f8426290ce6fe575870/json_with_comments-1.2.10-py3-none-any.whl", hash = "sha256:d7989c2577b1f8cbba735209f8d388d21017feb42ef30c29c230040f86b42700", size = 6533, upload-time = "2024-12-10T05:46:34.856Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, +] + +[[package]] +name = "jsonref" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn" }, + { name = "idna" }, + { name = "isoduration" }, + { name = "jsonpointer" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "rfc3987-syntax" }, + { name = "uri-template" }, + { name = "webcolors" }, +] + +[[package]] +name = "jsonschema-markdown" +version = "2026.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "jsonref" }, + { name = "loguru" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1a/d45598971daaa9b0cde2250d2693282b90885ae2c718da30471764a5f32d/jsonschema_markdown-2026.5.0.tar.gz", hash = "sha256:a52e40c4bf39859a89d77dc92008c812e240df8c5b7bac093e6e1c8b9181af56", size = 14602, upload-time = "2026-05-04T13:06:54.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/7b/f4f0b038c6e76ff6fbcfa6d8a38267d763e2ef38b0045b0fa87e1692bad7/jsonschema_markdown-2026.5.0-py3-none-any.whl", hash = "sha256:8e5bcc3292b779d15436de33f9c4e0dcfa604b061009cebcaf0d822fe64f7946", size = 15098, upload-time = "2026-05-04T13:06:55.172Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "jupyter-book" +version = "2.0.0b3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "jupyter-core" }, + { name = "jupyter-server" }, + { name = "nodeenv" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/d1/6e53124c8a98ea39192fff5a162aa239ff719a8aa10f0f0e5bf3bb466f5c/jupyter_book-2.0.0b3.tar.gz", hash = "sha256:f55e23cc33721b13142e42753a28fd145158b97bcef2a513f7fcd2cc403f72f6", size = 14475767, upload-time = "2025-08-20T11:06:17.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/1b/36d46d9da0fb50b9f584f3a0d93fad245e65d3fb46ba3d7e653b541c3eef/jupyter_book-2.0.0b3-py3-none-any.whl", hash = "sha256:ca01be03a4e5d54f7bfef1150837052ccb3ea3f8810a2687db59171f46ef30d0", size = 2606638, upload-time = "2025-08-20T11:06:14.953Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/dc/5512503b088997c2250b8bf18258fba9d9ce5ead641183700960d3c9d342/jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa", size = 359256, upload-time = "2026-06-09T13:15:01.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81", size = 109828, upload-time = "2026-06-09T13:14:58.835Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", extra = ["format-nongpl"] }, + { name = "packaging" }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854, upload-time = "2026-04-20T23:17:50.66Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512, upload-time = "2026-04-20T23:17:48.927Z" }, +] + +[[package]] +name = "jupyter-server" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6b/dc/db3a582633170186f8c8b31298d7eb26ad0eb031a1f53476c258b64eed05/jupyter_server-2.20.0.tar.gz", hash = "sha256:b5778ba337d8015a3dc2b80803ecdd5ac18d3797fddf61a50ea5fb472b4ebe14", size = 756523, upload-time = "2026-06-17T12:09:09.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/71/8c002223e873a870f5c41dc69b0a7c922301123e4a31d5d01ecb700aef77/jupyter_server-2.20.0-py3-none-any.whl", hash = "sha256:c3b67c93c471e947c18b5026f04f21614218adb706df8f48227d3ee8e0a7cdcc", size = 393143, upload-time = "2026-06-17T12:09:07.234Z" }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770, upload-time = "2026-01-14T16:53:20.213Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704, upload-time = "2026-01-14T16:53:18.738Z" }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload-time = "2023-11-23T09:26:37.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload-time = "2023-11-23T09:26:34.325Z" }, +] + +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "markdown2" +version = "2.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/ae/07d4a5fcaa5509221287d289323d75ac8eda5a5a4ac9de2accf7bbcc2b88/markdown2-2.5.5.tar.gz", hash = "sha256:001547e68f6e7fcf0f1cb83f7e82f48aa7d48b2c6a321f0cd20a853a8a2d1664", size = 157249, upload-time = "2026-03-02T20:46:53.411Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/af/4b3891eb0a49d6cfd5cbf3e9bf514c943afc2b0f13e2c57cc57cd88ecc21/markdown2-2.5.5-py3-none-any.whl", hash = "sha256:be798587e09d1f52d2e4d96a649c4b82a778c75f9929aad52a2c95747fa26941", size = 56250, upload-time = "2026-03-02T20:46:52.032Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "marshmallow" +version = "3.26.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/79/de6c16cc902f4fc372236926b0ce2ab7845268dcc30fb2fbb7f71b418631/marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57", size = 222095, upload-time = "2025-12-22T06:53:53.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl", hash = "sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73", size = 50964, upload-time = "2025-12-22T06:53:51.801Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "mistune" +version = "3.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/92/328a294a6de83bacb95bed01f04e0eaff4e3616ee359fc821a5dfc539b02/mistune-3.3.4.tar.gz", hash = "sha256:58b5c96d6fcb61190dfe5fae498d2b2065f99cf61e9649418fd54cf1ada86dfe", size = 121426, upload-time = "2026-07-22T05:22:30.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/e4/288365afae98953bc01de09f686f40d8ee84578135aa7767d5d4e60b5278/mistune-3.3.4-py3-none-any.whl", hash = "sha256:ee015381e955e370962968befe1d729ab60fafb6a715ac6751763fbce38c8d4a", size = 66862, upload-time = "2026-07-22T05:22:29.419Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "mystmd" +version = "1.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nodeenv" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/4d/1dbcedee69103807fad02844cc25833a6e1073ffd0ecc515380f70c00308/mystmd-1.6.3.tar.gz", hash = "sha256:83cf01e89754939603e99d8cb393617ff1c6997744e60dcbaed5a18d26dd07c8", size = 2791338, upload-time = "2025-10-10T23:28:11.361Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/5c/90c22a1c3a7f1eaa69fedd8a4b604cae1c67754f0aced38921547a5d09a5/mystmd-1.6.3-py3-none-any.whl", hash = "sha256:404b79db0a4587910e1d23d6ce93cd864d5dfa824f89cd910e1e4e21594ca9b2", size = 2823036, upload-time = "2025-10-10T23:28:09.559Z" }, +] + +[[package]] +name = "nbclient" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311, upload-time = "2026-04-08T00:44:14.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927, upload-time = "2026-04-08T00:44:12.845Z" }, +] + +[[package]] +name = "nbformat" +version = "5.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/80f407a9525bc5bd9865e5c37db3b78867fa43217f8aac5eab22b5f028b3/nbformat-5.11.0.tar.gz", hash = "sha256:7dbaed4a69cae28c2b4d44ab7430a6af4544fb89455023f6f21550be757b60c8", size = 151822, upload-time = "2026-08-06T12:29:55.597Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/4a/0eece9dad5e73230ca972f7bc29456ce7d74772f123d401fcf67379008f7/nbformat-5.11.0-py3-none-any.whl", hash = "sha256:f70a17f591a9ccd1c601d5e61a4b20972703926df0ba42458ce14bf575766bb6", size = 79820, upload-time = "2026-08-06T12:29:54.178Z" }, +] + +[[package]] +name = "nest-asyncio2" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, +] + +[[package]] +name = "ngff-spec" +source = { editable = "." } +dependencies = [ + { name = "json-schema-for-humans" }, + { name = "json-with-comments" }, + { name = "jsonschema-markdown" }, + { name = "jupyter-book" }, + { name = "mystmd" }, + { name = "tomli" }, +] + +[package.optional-dependencies] +testing = [ + { name = "pytest" }, + { name = "tox" }, +] + +[package.metadata] +requires-dist = [ + { name = "json-schema-for-humans" }, + { name = "json-with-comments" }, + { name = "jsonschema-markdown" }, + { name = "jupyter-book", specifier = "==2.0.0b3" }, + { name = "mystmd", specifier = "==1.6.3" }, + { name = "pytest", marker = "extra == 'testing'" }, + { name = "tomli" }, + { name = "tox", marker = "extra == 'testing'" }, +] +provides-extras = ["testing"] + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/52/0763d1d976d5c262df53ddda8d8d4719eedf9594d046f117c25a27261a19/platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3", size = 20916, upload-time = "2024-05-15T03:18:23.372Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/13/2aa1f0e1364feb2c9ef45302f387ac0bd81484e9c9a4c5688a322fbdfd08/platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", size = 18146, upload-time = "2024-05-15T03:18:21.209Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "prometheus-client" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyproject-api" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/bd/2f985c12bf33fdd8637e3a8f9418d6806f177601dee7c4924d0b2bb28650/pyproject_api-1.11.0.tar.gz", hash = "sha256:b8807d85a293e6c9f133e6575946fed45f1d42b22d58c780b33aa2421a799549", size = 23787, upload-time = "2026-07-21T13:09:33.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/6a/2822ee12bafe87af8f6cc620f7d1f126e77f82ce56ba888b94a9af5a979c/pyproject_api-1.11.0-py3-none-any.whl", hash = "sha256:860060c8832dce983b5eec6f41c4c43eb3ec06ff7332387a63acdf5ca27b68d8", size = 13275, upload-time = "2026-07-21T13:09:32.559Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/b7/1581a8103855c43567776aa34135e5ec3c597346c23bfd10c7eb5e0b10a4/python_discovery-1.5.1.tar.gz", hash = "sha256:e2ea8b884cd1701f386eda8cf327b87743f1dc21b7f784470799537d95635384", size = 77200, upload-time = "2026-07-31T22:06:02.48Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/07/a89b539750a159d5101c4eb9fc84e2961f65cefbd5e0b7440b284471c0b0/python_discovery-1.5.1-py3-none-any.whl", hash = "sha256:ac07f44cade589d954e9d6a1e1468539fdddd2cf676beb51da73e0f156b7c932", size = 35752, upload-time = "2026-07-31T22:06:01.116Z" }, +] + +[[package]] +name = "python-json-logger" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573, upload-time = "2026-03-29T04:39:56.805Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021, upload-time = "2026-03-29T04:39:55.266Z" }, +] + +[[package]] +name = "pytz" +version = "2026.3.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, +] + +[[package]] +name = "pywinpty" +version = "3.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/ef/2d27f30c59a67be7025b2d7858c8c2d282b74d66544b2384730b82de74fd/pywinpty-3.0.5.tar.gz", hash = "sha256:61db0db063de9865adbea66db294628f8577f608d9764a4c7d3384eeacc4e81b", size = 16223484, upload-time = "2026-06-11T00:11:58.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/ff/8bd91d4502b48bee0459bc912806fa512111905ab97d317e7cb1201b3542/pywinpty-3.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:b467dcad72365bc2205ed8b6e694e817d71de269d46e56cfe267dfa9d3d30e1b", size = 2092426, upload-time = "2026-06-10T23:40:23.292Z" }, + { url = "https://files.pythonhosted.org/packages/00/d2/dee13e67af2300a080dea30d4da8fdb05133a7eebb39171111f0530f7e88/pywinpty-3.0.5-cp310-cp310-win_arm64.whl", hash = "sha256:7dc4046ea8e4d7f0a16dae8dfcaeeda6df7ca3a9330444d2ba5bb96138fe0a91", size = 818083, upload-time = "2026-06-10T23:42:04.203Z" }, + { url = "https://files.pythonhosted.org/packages/b0/5c/31feb3dd82d1b33ae0bd09ca601edb993d9da1b7f0226b3336d4b4c39e1e/pywinpty-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:af7a8720c78776ddd6259b71dd567944f766a6cd67f8d2887fbc4973967bacda", size = 2092466, upload-time = "2026-06-10T23:44:24.453Z" }, + { url = "https://files.pythonhosted.org/packages/ee/fe/fe23e2229ffec0c10190cef5964f5c9b2dba179d23b69ae537b7ea90bcab/pywinpty-3.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:c2406f54f699eab75953fb75ce805f2ae55a33a957cd070890abd454fb4b7680", size = 818395, upload-time = "2026-06-10T23:41:56.93Z" }, + { url = "https://files.pythonhosted.org/packages/45/34/942cc95ca4e26489875aa8a95192766247a687379ec29543eebe73ec945f/pywinpty-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:d62946adf14b15b54c0b8d785f93fe18b04da23f4ad59e2e8c4612646e9abd23", size = 2090915, upload-time = "2026-06-10T23:43:14.98Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/5b9053004844139ea8bd86209c57ade12b134b2782f383a095784c8531ec/pywinpty-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:e9391c05fbfa7a992a97e831fc6849887b4014a614192e3d984a7ca59592b376", size = 815934, upload-time = "2026-06-10T23:41:42.384Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f4/2a464b9893cceb3b3f416356e94fdc3e1bca9476993927e4e6d99fe95382/pywinpty-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:48db1b0ad9d0a1b81dcaaa7163a99a7808deaceb0c1b2344716dc1fc090c3c4c", size = 2090471, upload-time = "2026-06-10T23:42:11.071Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2c/a138491a0afbdb50eb79395577bd326d4b0fbde7209417d1a8087ff2493a/pywinpty-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:2c6008fb2d3774b48693b2fcb7f2cc317ade9dc581289a964ffeeaf81307c9b5", size = 815518, upload-time = "2026-06-10T23:42:02.363Z" }, + { url = "https://files.pythonhosted.org/packages/6f/15/54400049a380582acd1282665c70fcf11e0bd3713679aca78e24c3aae738/pywinpty-3.0.5-cp313-cp313t-win_amd64.whl", hash = "sha256:22ce1b780d89821cc52daf6eac0708af22d93d000ce9c7c07e37489db8594598", size = 2089920, upload-time = "2026-06-10T23:44:13.395Z" }, + { url = "https://files.pythonhosted.org/packages/94/0c/6f24f3c0799f502259b24bdf841a99ad2b0d59df5c2525b4e2a286d14be2/pywinpty-3.0.5-cp313-cp313t-win_arm64.whl", hash = "sha256:9c2919a81bc5cfb09b86fc5a002112b2de95ca4304a07413cbeeb746a1307a5c", size = 814520, upload-time = "2026-06-10T23:43:28.588Z" }, + { url = "https://files.pythonhosted.org/packages/e9/23/f3cd1b1e5fc56517f54452c49f92049e7dd9ffc8a63de22a495581f50d04/pywinpty-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:03bb3c16d691d9242267201830bcd0e64a9b663170e9042bc84b210da9de15ac", size = 2090663, upload-time = "2026-06-10T23:43:59.845Z" }, + { url = "https://files.pythonhosted.org/packages/9d/dd/96d6cbfc6d9ddab5c1c2f92c26545ae8997446a2ba7ee2024cd43c81f49b/pywinpty-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:89c5c6ef08997a3b4b277b214a35fe15cab4dd6d119f0140aa71df5b1168fdbc", size = 815700, upload-time = "2026-06-10T23:40:50.001Z" }, + { url = "https://files.pythonhosted.org/packages/30/36/d98087bce0acaa4cce7f196103cfa7be3f63ce65f52473bb3e38784ae5d9/pywinpty-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7b566165e0c5fdd6abe167a5ac8b954be6a843eb55a85946576d6bc1dea03d6d", size = 2090093, upload-time = "2026-06-10T23:40:58.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/fd/fe2b0db922ba052ce3976a08f3fc05d0c05047c8b4ebb6102e832b8ef563/pywinpty-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:24366280a8aa677323da87bec729cb3ea3b35367386cece0978bdc6e4695c690", size = 814517, upload-time = "2026-06-10T23:42:34.946Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760, upload-time = "2019-10-28T16:00:19.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242, upload-time = "2019-10-28T16:00:13.976Z" }, +] + +[[package]] +name = "rfc3987-syntax" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239, upload-time = "2025-07-18T01:05:05.015Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.11' and python_full_version < '3.14'", +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "send2trash" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255, upload-time = "2026-01-14T06:27:36.056Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610, upload-time = "2026-01-14T06:27:35.218Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.9.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/99/a6ca3beb3ccacb41fb3321d8a60e5566f9e6467601ef8eba6a17e1b89778/soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74", size = 122445, upload-time = "2026-08-07T00:57:24.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/dc/ad025c1ee131eba60c69f4dd5779b18fcf1e6b21a343e2162a84d5d133c7/soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", size = 37370, upload-time = "2026-08-07T00:57:23.524Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701, upload-time = "2024-03-12T14:34:39.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload-time = "2024-03-12T14:34:36.569Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" }, + { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, +] + +[[package]] +name = "tox" +version = "4.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "chardet" }, + { name = "colorama" }, + { name = "filelock" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "pluggy" }, + { name = "pyproject-api" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/4a/55f9dba99aad874ae54a7fb2310c940e978fd0155eb3576ddebec000fca7/tox-4.20.0.tar.gz", hash = "sha256:5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5", size = 181364, upload-time = "2024-09-19T03:46:15.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/ee/6f9bf37f197578f98fb450f1aeebf4570f85b24b00d846bbde6e11489bd1/tox-4.20.0-py3-none-any.whl", hash = "sha256:21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34", size = 157087, upload-time = "2024-09-19T03:46:12.754Z" }, +] + +[[package]] +name = "traitlets" +version = "5.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825, upload-time = "2023-05-24T20:25:47.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827, upload-time = "2023-05-24T20:25:45.287Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678, upload-time = "2023-06-21T01:49:05.374Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140, upload-time = "2023-06-21T01:49:03.467Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2d/dc/a6eb1ddfa7f1e390fa599b078453c97edb3f6f846b34fb4eac3e8ea16401/virtualenv-21.7.4.tar.gz", hash = "sha256:c9d960c95fa458171e58222a5ccab7465298e4b6559977865e627c4719f1e825", size = 5345511, upload-time = "2026-08-10T22:54:33.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/4c/eb2f52aeeaf30dbd073d315a251a63ae2b8263171ec4428c135140cb0802/virtualenv-21.7.4-py3-none-any.whl", hash = "sha256:376ec93cd6aab3044fa395d7db226db38043b7b5748948044b2a87168525e843", size = 5324444, upload-time = "2026-08-10T22:54:31.515Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253, upload-time = "2026-06-29T18:11:11.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166, upload-time = "2026-06-29T18:11:09.888Z" }, +] + +[[package]] +name = "webcolors" +version = "25.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] From f8524147b5e298551bea82d72043977a2c71607a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 11 Aug 2026 11:27:30 +0100 Subject: [PATCH 05/79] Remove tox Also bump version of checkout action on CI --- .github/workflows/codespell.yml | 2 +- .github/workflows/validation.yml | 9 +- justfile | 2 +- pyproject.toml | 2 +- tox.ini | 10 --- uv.lock | 147 +++---------------------------- 6 files changed, 18 insertions(+), 154 deletions(-) delete mode 100644 tox.ini diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 7c9eafb1..85498c35 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -18,6 +18,6 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Codespell uses: codespell-project/actions-codespell@v2 diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 2e2ab584..5e03a0d8 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -8,9 +8,6 @@ jobs: name: Validation runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - run: python -mpip install --upgrade wheel tox - - run: tox \ No newline at end of file + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v9.0.0 + - run: uv run pytest -v diff --git a/justfile b/justfile index 69c22891..dee46f08 100644 --- a/justfile +++ b/justfile @@ -16,4 +16,4 @@ lint: spell # Run schema tests. test: - uv run tox + uv run pytest -v diff --git a/pyproject.toml b/pyproject.toml index 3e90d0ae..82e5d033 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dependencies = [ [project.optional-dependencies] testing = [ - "tox", + "codespell", "pytest", # https://docs.pytest.org/en/latest/contents.html ] diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 3dbce09e..00000000 --- a/tox.ini +++ /dev/null @@ -1,10 +0,0 @@ -[tox] -envlist = v04 -skipsdist = True - -[testenv] -deps = - pytest - jsonschema -commands = - pytest tests --color=yes --basetemp={envtmpdir} {posargs:-v} diff --git a/uv.lock b/uv.lock index 4ba1ecaf..687394b4 100644 --- a/uv.lock +++ b/uv.lock @@ -139,15 +139,6 @@ css = [ { name = "tinycss2" }, ] -[[package]] -name = "cachetools" -version = "7.1.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/d2/47e8bc06fe2a06d3f5bdf20f1126ab66c4e99dc48d940e7ba873f7ac7131/cachetools-7.1.7.tar.gz", hash = "sha256:a3e2a00b14d8f8a6b70c1dae7b4685e7ad3bc965c5b42124a2d6ce895da6cf50", size = 40680, upload-time = "2026-08-01T21:20:40.434Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/d8/767faeda872075724b95dd675466a645f1b92aadcdcf2d1429dcfd76c176/cachetools-7.1.7-py3-none-any.whl", hash = "sha256:ef98ef375ad188819ef2f9b3645e3987f4b8c5b7550e436ad998c2de78296df0", size = 16830, upload-time = "2026-08-01T21:20:38.977Z" }, -] - [[package]] name = "certifi" version = "2026.7.22" @@ -267,49 +258,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, ] -[[package]] -name = "chardet" -version = "7.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/56/7c/c9cf52695364a0609829ccc9e88adea553587ef70349314f29ed1b62bcff/chardet-7.5.1.tar.gz", hash = "sha256:0df08f2b2f6ac04b3e7f9e8ad1b1559c2e8497338ff9dfa1e0922335ff9dfe8d", size = 837498, upload-time = "2026-08-06T05:02:11.499Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/c3/12e838956015a4c3d4cf6af1ea843fddd0854e43e03d69d13897133ac845/chardet-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:951ccab3a037a563079f4d448e82bbfee5f2715239440f732ffb0ac9f251dedb", size = 938086, upload-time = "2026-08-06T05:01:14.135Z" }, - { url = "https://files.pythonhosted.org/packages/da/6e/9a9c51f5d8b918c3e1ece93ce0369ca34768044749208058659095de9d78/chardet-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f22396ad419f1e78594057e200aa7253be56840f5b04d07b86ccecd99e09c068", size = 923958, upload-time = "2026-08-06T05:01:16.124Z" }, - { url = "https://files.pythonhosted.org/packages/92/2f/0ed2206d6efbd1cd4888e83ee9f8a0a2f89893bd750c987cd8bea8245a2f/chardet-7.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:126b2a65141ed8a460c721d19f487c7b6fd12542aa761ce449f543296d0dd71e", size = 948644, upload-time = "2026-08-06T05:01:17.885Z" }, - { url = "https://files.pythonhosted.org/packages/03/8e/47ded9c693655501231a001dba9a1319d1c89010a772b7752aa69ce8ca0c/chardet-7.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b1c049906b95db7b12fd674f661f75285baf925eae98aa52a4a09305fc786855", size = 959375, upload-time = "2026-08-06T05:01:19.371Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e4/714cfd3de9e34964f4c8fe85fe929ef2a9d889bd908d5cdc822ecee3a1cd/chardet-7.5.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:61312fd3ff363c3ec549548250630a02fd3123c360dd492bf1fce0d28e915b87", size = 952712, upload-time = "2026-08-06T05:01:21.477Z" }, - { url = "https://files.pythonhosted.org/packages/27/15/e82da34603cda9962fa4627a8d89f11d808c2b616d58138416c78277f05c/chardet-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:5953d8236049aed0411908cfeaeeec03984ab2f109f980f0ec70fbe6938c8f9e", size = 1035569, upload-time = "2026-08-06T05:01:22.931Z" }, - { url = "https://files.pythonhosted.org/packages/2a/e9/86ebd066a78fc3c1c368e6448eee363e596e5e4b802460566af40e09dbbb/chardet-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e72489029c1f6e4be6138dd045a4e52bffaba5d5da0398df585bfcf8b239e324", size = 934119, upload-time = "2026-08-06T05:01:24.668Z" }, - { url = "https://files.pythonhosted.org/packages/79/89/d683635b8da75762c4c7c1978cbe374bb0e03c236b97124c8913b0010290/chardet-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6df2e255413c5f277067d9af7444ab1e9719126335efbefae24d8370aedf35c5", size = 920018, upload-time = "2026-08-06T05:01:26.318Z" }, - { url = "https://files.pythonhosted.org/packages/82/08/7d2cf6856455588aad4f92f1efc8dcab6850a2cb20629ac57214cd8fb693/chardet-7.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d06a8bacc8b6a26e900c3bd825601f9a8c02e063e687e960cf77363a9a397a0b", size = 944717, upload-time = "2026-08-06T05:01:27.811Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8c/8120efdadbf8a54f3bb4892ce6051be055eab7cedd7f85ed389f47c59299/chardet-7.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a599a836fbd41ff5a2a0c20e211da13ba8cc14dcba1e4bcfad8a7bcad64a2ff6", size = 954791, upload-time = "2026-08-06T05:01:29.348Z" }, - { url = "https://files.pythonhosted.org/packages/c5/28/e8df108688d80ac4e983c489fa6ddf14899b8513e3c93d6909c7de60245a/chardet-7.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bbf6948b7a5b85af5e435993c4e5fdb092d0d8f38c00d68c96e2640bafce5ec2", size = 945934, upload-time = "2026-08-06T05:01:30.77Z" }, - { url = "https://files.pythonhosted.org/packages/ea/21/4b8782d18fbec3b12a57fe9e5fcf252edbaefbe9386bc4a1620b7872d43d/chardet-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:a77d6d2d61f39b40423bd0abaee32175739cec9f11edf9e7236a5341d0e05c99", size = 1034222, upload-time = "2026-08-06T05:01:32.468Z" }, - { url = "https://files.pythonhosted.org/packages/29/95/60f047ece9faf585d6f625adea8786bb15a453fbf183e77a5762c8755c86/chardet-7.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3eb37b2c0aa67bfb1112aa90bfdd95cd3b4006fe051a2ea4872c3c6ba9cf855b", size = 939537, upload-time = "2026-08-06T05:01:34.127Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8e/847935c588455b0d82fa57a5a8ced4c73a928e30f2012639228e566e3283/chardet-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a001a8f030625b705d9a4e68116e573462bd38192cc6c1bfa318b45606747ac", size = 922039, upload-time = "2026-08-06T05:01:35.929Z" }, - { url = "https://files.pythonhosted.org/packages/fb/9f/841f7d9f1ff7b99ef2a7e7596b14199dbfe289a11b39c7f98cfb23d0c55a/chardet-7.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54bae16fc5b7ea39956ee737dd09b5f5438deafa9f565ac27c882992c3965b88", size = 945557, upload-time = "2026-08-06T05:01:37.696Z" }, - { url = "https://files.pythonhosted.org/packages/10/56/89866e9995fdb2c8e8ff1336c4ecd4c86ba0f7e4622ccfacad2c13b2ba7e/chardet-7.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecbe0e0a9fff7825fc48650ef297ede49c71a7abc411a0638416207a70bf78c0", size = 961089, upload-time = "2026-08-06T05:01:39.319Z" }, - { url = "https://files.pythonhosted.org/packages/1b/fe/f568f20d0cea7f853769d3015915daf8bb8460a4265237a051bb374fdcd0/chardet-7.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:469f164a608ccee4a8a2c0c2b4328470df9b07443e8269714f8e8a51f6fdf4c4", size = 950289, upload-time = "2026-08-06T05:01:40.782Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9a/9e17c1c6fbc65f9cba07951d359a24c8f7b17d3ca26bd54f33fd98b70f2e/chardet-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:fad6fbc154113e3b17bb757c34b21477e4b6d69fdd4ce51ff2b3f29a42f08b5b", size = 1036514, upload-time = "2026-08-06T05:01:42.394Z" }, - { url = "https://files.pythonhosted.org/packages/53/3d/3aed10edee5735bc92cf0bd1a469335f596331b3ffc82bbdd157f8d5135f/chardet-7.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b72b9b95c636d170d9a6284d99be9fd93ca08bb2221385ff1a5b69da98ec4f76", size = 935215, upload-time = "2026-08-06T05:01:44.082Z" }, - { url = "https://files.pythonhosted.org/packages/c5/e9/bd883f6ed3cb53a66b6752da493ef4b82f6435e7c085e0eee21296a0a31c/chardet-7.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d30a84ec52c37532ad7978329a41224c454959b22503b8f8ed4df763e6c3ed2", size = 917514, upload-time = "2026-08-06T05:01:46.018Z" }, - { url = "https://files.pythonhosted.org/packages/ea/d2/1773383d05a6cc1a69ee075cf477942edbb00c90bf8ac9778bce884e4c0a/chardet-7.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6faa6b18c7af2fca8d4cbb51fa035fa47f8f4b68547ae927a1c0be34dfc96fa", size = 944654, upload-time = "2026-08-06T05:01:48.01Z" }, - { url = "https://files.pythonhosted.org/packages/05/c2/9e5200bd6f8c6a32d0f2bbb6235783b3ca421630cb4f18507d5c9edc07ac/chardet-7.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36843a0e9e3196142e317806d5ca29ab0bb714de2315897124a018438cc535a3", size = 959589, upload-time = "2026-08-06T05:01:49.512Z" }, - { url = "https://files.pythonhosted.org/packages/11/b7/1e49d101a790501e540f9d9b33e52a65ccfcc0c0748220cb3ffb44987823/chardet-7.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:59598a8e15769ebe62fd0c153a5e4347a7a126cc7b376a724ff63ad80b890506", size = 949138, upload-time = "2026-08-06T05:01:50.993Z" }, - { url = "https://files.pythonhosted.org/packages/88/d4/ed3b7e5c882ba24b71df8554840898ebbbbc3a57844d218edd4a1f8770a4/chardet-7.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:71f152d66e7bd1faad615897d34765243cb567ad6aef07bf0d7c0cdd69bf6cce", size = 1034753, upload-time = "2026-08-06T05:01:52.488Z" }, - { url = "https://files.pythonhosted.org/packages/68/04/71d601ad6b13b30921c7c0e085aec44b152df206bef45b164988d4ea143b/chardet-7.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a6b20b42a9e6048d557aec9903df33239c299b4643c6553203127c8f92f47e78", size = 934245, upload-time = "2026-08-06T05:01:54.06Z" }, - { url = "https://files.pythonhosted.org/packages/85/84/5690a64afecf9967c3844ec96842d549e6f3ef72009bfd5524b69111245a/chardet-7.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6eefafa763b7099c3c0a86c343097d69b766b3fe5705edba9400bae26450af1f", size = 917122, upload-time = "2026-08-06T05:01:55.526Z" }, - { url = "https://files.pythonhosted.org/packages/bf/7b/df208823a1c53aa765caa4511479a7182399a397fb247aa30e0adccdd1a0/chardet-7.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c99dea9eea1bdc6cc20dcb3555581234899d58a4147163c7d03d8fca11402b0", size = 947091, upload-time = "2026-08-06T05:01:56.995Z" }, - { url = "https://files.pythonhosted.org/packages/76/bb/32871c9e393f174a60930a29873b6a4217b3f1c65667cad303ef146caedc/chardet-7.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c378ccd8c0fab30171ed7c54d501f72c4294d9b98c71ea1ff7852aa9ccac399", size = 959741, upload-time = "2026-08-06T05:01:58.525Z" }, - { url = "https://files.pythonhosted.org/packages/85/69/cd0f5a176ed50787a9f143dd79a6a2cb47ce30cc1b164c76445bf3d971ea/chardet-7.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1cd58589a52211901c5ac57016feffbe8a7e7e6328f5bf0b03ce44043e221e99", size = 950265, upload-time = "2026-08-06T05:01:59.962Z" }, - { url = "https://files.pythonhosted.org/packages/e9/8f/d871b357287caae0483d2cd235fae476da3768dd7d56e1fe733ffd3f707c/chardet-7.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:46d10bbb7ba7ba345694fe0276a61290d4cc25d3624c03282311dbc58c1d49b4", size = 1032664, upload-time = "2026-08-06T05:02:01.415Z" }, - { url = "https://files.pythonhosted.org/packages/3e/f9/746f0b494b2a08e694e4f97259979dce9f16740f0c624abcc76e9d2642c0/chardet-7.5.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a198d47eaa28e1ba458f11ab636f0677f34c5d1ce7e909bec6ca2f346c21e78c", size = 954309, upload-time = "2026-08-06T05:02:02.971Z" }, - { url = "https://files.pythonhosted.org/packages/de/60/41497afb2f225cc0c8cd731b34ee0f7bd5a85ab76547035f22b0326c0342/chardet-7.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:44214df32ff7c87fe82d7f1f21c7fe95c04769869e523f944413e668e001f52c", size = 935936, upload-time = "2026-08-06T05:02:04.921Z" }, - { url = "https://files.pythonhosted.org/packages/78/eb/d69d9013a67de60fc71da55d8cd6b25efdeaba0b0f4f9ae655fb71d82604/chardet-7.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c461fc9746912d19ab77efc1912b7f9a364b7fca1d787e1215207d5f6f68685d", size = 963210, upload-time = "2026-08-06T05:02:06.855Z" }, - { url = "https://files.pythonhosted.org/packages/58/21/eaa124a4a7beb8bc4df5e7a4df78021c09b2e5d68fbf66a24544228e583b/chardet-7.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26160da949c66f0cca280101d85e6e4fddca53bfe465a1b69ceb3c9998295cc0", size = 975809, upload-time = "2026-08-06T05:02:08.497Z" }, - { url = "https://files.pythonhosted.org/packages/36/6b/f195e0d66b1e18ccbcc3adc52c1c7e1263203e70b9bbe12c5a4198d1935b/chardet-7.5.1-py3-none-any.whl", hash = "sha256:ba7e9b6c15b4fcdf07ae675e5116dee610425f9ad6955c9bdb6bf99aed2e555d", size = 655022, upload-time = "2026-08-06T05:02:10.071Z" }, -] - [[package]] name = "charset-normalizer" version = "3.4.9" @@ -409,6 +357,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, ] +[[package]] +name = "codespell" +version = "2.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/19/45e941380f69c042b43423513d201e6592346f992394347f5e7174c31407/codespell-2.4.3.tar.gz", hash = "sha256:cbe085e331227b37bb86ef8bddd08dc768c704ee9a07ca869852c093fa2793e2", size = 352773, upload-time = "2026-07-15T11:51:54.159Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/bf/bdb951d34eb169140b546f44be9ec4525d1acefb9eb5572071f5492b19fc/codespell-2.4.3-py3-none-any.whl", hash = "sha256:af2505b335e8573dbd2d384d1c4ef498f4006f4ba2d6fceca01e55b91f52628a", size = 340736, upload-time = "2026-07-15T11:51:52.925Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -487,21 +444,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] -[[package]] -name = "distlib" -version = "0.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, -] - [[package]] name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -526,15 +474,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/17/e1/62cc96341f01bdff2ba967441939178fcd1900d11ce7e6554d9954a5d7ec/fastjsonschema-2.22.1-py3-none-any.whl", hash = "sha256:cf377ff5c9a6f4f3125fb35f75a2c5767bd824ffbcf62c209a93cd48d1453999", size = 26239, upload-time = "2026-07-27T13:31:03.251Z" }, ] -[[package]] -name = "filelock" -version = "3.32.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/57/3ba6e6cb097f85b855b00163d169f35365f44277df044dcf96d55b8f62a3/filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8", size = 217172, upload-time = "2026-07-29T22:46:04.895Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/e8/72f8cef9fdfeffe06213fe8508039396ee48daa0e3259457ed766173bfd6/filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82", size = 98830, upload-time = "2026-07-29T22:46:03.52Z" }, -] - [[package]] name = "fqdn" version = "1.5.1" @@ -1157,12 +1096,13 @@ dependencies = [ [package.optional-dependencies] testing = [ + { name = "codespell" }, { name = "pytest" }, - { name = "tox" }, ] [package.metadata] requires-dist = [ + { name = "codespell", marker = "extra == 'testing'" }, { name = "json-schema-for-humans" }, { name = "json-with-comments" }, { name = "jsonschema-markdown" }, @@ -1170,7 +1110,6 @@ requires-dist = [ { name = "mystmd", specifier = "==1.6.3" }, { name = "pytest", marker = "extra == 'testing'" }, { name = "tomli" }, - { name = "tox", marker = "extra == 'testing'" }, ] provides-extras = ["testing"] @@ -1334,19 +1273,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, ] -[[package]] -name = "pyproject-api" -version = "1.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ab/bd/2f985c12bf33fdd8637e3a8f9418d6806f177601dee7c4924d0b2bb28650/pyproject_api-1.11.0.tar.gz", hash = "sha256:b8807d85a293e6c9f133e6575946fed45f1d42b22d58c780b33aa2421a799549", size = 23787, upload-time = "2026-07-21T13:09:33.744Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/6a/2822ee12bafe87af8f6cc620f7d1f126e77f82ce56ba888b94a9af5a979c/pyproject_api-1.11.0-py3-none-any.whl", hash = "sha256:860060c8832dce983b5eec6f41c4c43eb3ec06ff7332387a63acdf5ca27b68d8", size = 13275, upload-time = "2026-07-21T13:09:32.559Z" }, -] - [[package]] name = "pytest" version = "9.1.1" @@ -1377,18 +1303,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] -[[package]] -name = "python-discovery" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/b7/1581a8103855c43567776aa34135e5ec3c597346c23bfd10c7eb5e0b10a4/python_discovery-1.5.1.tar.gz", hash = "sha256:e2ea8b884cd1701f386eda8cf327b87743f1dc21b7f784470799537d95635384", size = 77200, upload-time = "2026-07-31T22:06:02.48Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/07/a89b539750a159d5101c4eb9fc84e2961f65cefbd5e0b7440b284471c0b0/python_discovery-1.5.1-py3-none-any.whl", hash = "sha256:ac07f44cade589d954e9d6a1e1468539fdddd2cf676beb51da73e0f156b7c932", size = 35752, upload-time = "2026-07-31T22:06:01.116Z" }, -] - [[package]] name = "python-json-logger" version = "4.1.0" @@ -2019,27 +1933,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, ] -[[package]] -name = "tox" -version = "4.20.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cachetools" }, - { name = "chardet" }, - { name = "colorama" }, - { name = "filelock" }, - { name = "packaging" }, - { name = "platformdirs" }, - { name = "pluggy" }, - { name = "pyproject-api" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "virtualenv" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/4a/55f9dba99aad874ae54a7fb2310c940e978fd0155eb3576ddebec000fca7/tox-4.20.0.tar.gz", hash = "sha256:5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5", size = 181364, upload-time = "2024-09-19T03:46:15.252Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/ee/6f9bf37f197578f98fb450f1aeebf4570f85b24b00d846bbde6e11489bd1/tox-4.20.0-py3-none-any.whl", hash = "sha256:21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34", size = 157087, upload-time = "2024-09-19T03:46:12.754Z" }, -] - [[package]] name = "traitlets" version = "5.16.1" @@ -2098,22 +1991,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, ] -[[package]] -name = "virtualenv" -version = "21.7.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "distlib" }, - { name = "filelock" }, - { name = "platformdirs" }, - { name = "python-discovery" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2d/dc/a6eb1ddfa7f1e390fa599b078453c97edb3f6f846b34fb4eac3e8ea16401/virtualenv-21.7.4.tar.gz", hash = "sha256:c9d960c95fa458171e58222a5ccab7465298e4b6559977865e627c4719f1e825", size = 5345511, upload-time = "2026-08-10T22:54:33.316Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4c/eb2f52aeeaf30dbd073d315a251a63ae2b8263171ec4428c135140cb0802/virtualenv-21.7.4-py3-none-any.whl", hash = "sha256:376ec93cd6aab3044fa395d7db226db38043b7b5748948044b2a87168525e843", size = 5324444, upload-time = "2026-08-10T22:54:31.515Z" }, -] - [[package]] name = "wcwidth" version = "0.8.2" From 38b3b4944686e9434ce96fbe62d64d3c2d576c19 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 11 Aug 2026 11:31:33 +0100 Subject: [PATCH 06/79] Fix: use extras correctly in uv run --- .github/workflows/validation.yml | 2 +- justfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 5e03a0d8..186610e8 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -10,4 +10,4 @@ jobs: steps: - uses: actions/checkout@v7 - uses: astral-sh/setup-uv@v9.0.0 - - run: uv run pytest -v + - run: uv run --extra testing pytest -v diff --git a/justfile b/justfile index dee46f08..cab03ade 100644 --- a/justfile +++ b/justfile @@ -9,11 +9,11 @@ build: # Check spelling in the source files; # configured in pyproject.toml. spell: - uv run codespell + uv run --extra testing codespell # Run all lint commands. lint: spell # Run schema tests. test: - uv run pytest -v + uv run --extra testing pytest -v From 5c76733fe3a1f97a3957909c879b15d57689f74e Mon Sep 17 00:00:00 2001 From: Draga Doncila Pop <17995243+DragaDoncila@users.noreply.github.com> Date: Tue, 25 Aug 2026 01:43:34 +0700 Subject: [PATCH 07/79] Fix version strings (#193) Co-authored-by: Draga Doncila --- .../spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json | 2 +- .../zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json index a83afee1..c809676a 100644 --- a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0 + "version": "0.6rc0", "image-label": { "colors": [ { diff --git a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json index 0d23dfc1..c4b8d3c2 100644 --- a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.6rc0 + "version": "0.6rc0", "plate": { "columns": [ { From 4dde15b3bca8572f9e9d08f834a78e6070dd1894 Mon Sep 17 00:00:00 2001 From: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:04:10 +0200 Subject: [PATCH 08/79] feat: remove warning about experimental nature (#189) --- index.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/index.md b/index.md index 382bb634..da28878a 100644 --- a/index.md +++ b/index.md @@ -17,12 +17,6 @@ authors: " " ## Abstract -```{warning} -This is the release candidate for version 0.6rc0 of the ngff-specification. -Upon release of 0.6, this warning will be removed and the version number in the document updated. - -``` - This document contains next-generation file format (NGFF) specifications for storing bioimaging data in the cloud. All specifications are submitted to the community for review. From 8c8d0741667b6df4e0599abf077593512c7b71c3 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 25 Aug 2026 15:59:27 +0100 Subject: [PATCH 09/79] Add just to dependencies Also add some useful recipes --- justfile | 14 ++++++++++++-- pyproject.toml | 3 +++ uv.lock | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/justfile b/justfile index cab03ade..3ab83f74 100644 --- a/justfile +++ b/justfile @@ -1,16 +1,26 @@ _: just --list -# Build the specification in the _build/ directory. -build: +_prebuild: uv run python pre_build.py + +# Build the specification in the _build/ directory. +build: _prebuild uv run jupyter book build --html --ci +# Build the book and start a local server to view it. +serve: _prebuild + uv run jupyter book start + # Check spelling in the source files; # configured in pyproject.toml. spell: uv run --extra testing codespell +# Rebuild the `CITATION.cff` file from `myst.yml`. +cff: + uv run jupyter book build --cff + # Run all lint commands. lint: spell diff --git a/pyproject.toml b/pyproject.toml index 82e5d033..d2447a4a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,9 @@ testing = [ "pytest", # https://docs.pytest.org/en/latest/contents.html ] +[dependency-groups] +dev = ["rust-just"] + [tool.codespell] ignore-regex = '\bComparin\b' skip = ".git,.codespellrc,references.bib,.venv,.tox,*.css,_build" diff --git a/uv.lock b/uv.lock index 687394b4..c4ae904e 100644 --- a/uv.lock +++ b/uv.lock @@ -1100,6 +1100,11 @@ testing = [ { name = "pytest" }, ] +[package.dev-dependencies] +dev = [ + { name = "rust-just" }, +] + [package.metadata] requires-dist = [ { name = "codespell", marker = "extra == 'testing'" }, @@ -1113,6 +1118,9 @@ requires-dist = [ ] provides-extras = ["testing"] +[package.metadata.requires-dev] +dev = [{ name = "rust-just" }] + [[package]] name = "nodeenv" version = "1.9.1" @@ -1795,6 +1803,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, ] +[[package]] +name = "rust-just" +version = "1.58.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/d5/794e00d644caa238e931d4991d69951401492de55aa19334fdac72322ce2/rust_just-1.58.0.tar.gz", hash = "sha256:3226a7f201bf9a7766e676d32c5d8c5ae4fe0e3642628e0a9d4b62394dd0cefe", size = 2006103, upload-time = "2026-08-04T02:59:21.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/12/66b02e33ada6fe66f77091f298de83ae8221ff0ac04472a16adea742688a/rust_just-1.58.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cf620ee15c9f12246ba628000d96f338f395d03c770dd55826ceed26881f9843", size = 2289171, upload-time = "2026-08-04T02:58:57.345Z" }, + { url = "https://files.pythonhosted.org/packages/46/2f/d223d8d3f6e686365d7e0377c7df276dbb0afa407ed5749c654920906152/rust_just-1.58.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:95029add8ceab772ce9e3542fad9543d13d142513c7898987fd7ad1317090101", size = 2129203, upload-time = "2026-08-04T02:58:59.075Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3c/4e548af5d2e23d4f5946e226f8ebf7daac1ee1803f9739d0a4193d63dfb0/rust_just-1.58.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1483226b767db4a0ea523eedd165667663115514c92a50577c9ab84aba76352", size = 2217447, upload-time = "2026-08-04T02:59:00.795Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f3/8fbbdc706a52c875a46dd4c33d8d0220b76a712ed1aff68cc47590c1eabf/rust_just-1.58.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b7536e87b0fb4e9f0856488a296977dabaf2f3b6761bf084ec70ed6c8107255", size = 2188508, upload-time = "2026-08-04T02:59:02.27Z" }, + { url = "https://files.pythonhosted.org/packages/f8/df/218a4b42a5bc37d575cdf7aef2cdaea1d64679aa542361ca157ab15e3e65/rust_just-1.58.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77df7f183f54a3be94e331b98cbd27f299368ad2a8b208f3ac49af76ea0954b9", size = 2390783, upload-time = "2026-08-04T02:59:03.918Z" }, + { url = "https://files.pythonhosted.org/packages/86/05/001c035ba15b19a81039643506e62e5b82a80d4461617ec8dcac59c7dd7e/rust_just-1.58.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54521c790615033f92e2336b73f04017fdb3e8f7e57143011b2cb7b17ea74a36", size = 2504440, upload-time = "2026-08-04T02:59:05.175Z" }, + { url = "https://files.pythonhosted.org/packages/26/90/187046be529d840eec91ac51ecfd0fb8fc911f1771e0e51d85c3b03cd248/rust_just-1.58.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83dfc3d8b4802d7e21e8eefb102df049f9b171b998617735579d717bf01d098e", size = 2462963, upload-time = "2026-08-04T02:59:06.634Z" }, + { url = "https://files.pythonhosted.org/packages/31/f1/ddd312fe9e792bf3dde3bf7669e77a1ca069cebba864ee2a625b757207c3/rust_just-1.58.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e2cc32ac8f3ec540129b09b818403cbbca44d84ebda4bb9e4b045dbd48a47", size = 2381777, upload-time = "2026-08-04T02:59:07.852Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7d/98fa3f4af78ea2339109d5fc70751bae918ad8438b3205fd9f7d532e8021/rust_just-1.58.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9085e86d98d15272e00721b95d125b63f28de0adc842127271ef3c1223bf150a", size = 2238418, upload-time = "2026-08-04T02:59:09.098Z" }, + { url = "https://files.pythonhosted.org/packages/0a/64/4059516b02862be59d37f389e64a77c6252effcfeabeb932a6793bc2ed81/rust_just-1.58.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2c6a9facc5aab021d1d54cc03fc406ab49ab7cbe802f233ba99db6251bfdb3b0", size = 2219864, upload-time = "2026-08-04T02:59:10.387Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8d/6c79364ce1973b405d90127f552fd21a372a1322a62d03af9f4fcc2199dc/rust_just-1.58.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:73f12c197573a945b6dc17e77d7c2bd3c1b297f9ddba9b2d64f19b79d9c5568c", size = 2210179, upload-time = "2026-08-04T02:59:12.123Z" }, + { url = "https://files.pythonhosted.org/packages/69/b4/287008f012ec8fd6022da97e08abc147e195577c23ca4e919ceac3609ad9/rust_just-1.58.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d4b5d2bf0f05b87d3bfdcf698583f4f64047c6b4f1f49bc002b57d21db3ed980", size = 2352630, upload-time = "2026-08-04T02:59:13.688Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1f/cb3c22d56649417792ed6c1e7b7d0835cc3f440a2f0a8ea332a2dbc9d26e/rust_just-1.58.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:4f95cccd7f85cb55da30d362d748747e89dfd24869973310168214bc7331cbac", size = 2413427, upload-time = "2026-08-04T02:59:15.204Z" }, + { url = "https://files.pythonhosted.org/packages/50/c8/1a3880ee39ee25dc2d8f1e5f965a2bed402859ada434d19b131d0cd86beb/rust_just-1.58.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6c0cdfe4db533d37a3ac0fd790b3fa21f8e3d913cc218fcde84c40bc02019667", size = 2461925, upload-time = "2026-08-04T02:59:16.683Z" }, + { url = "https://files.pythonhosted.org/packages/2f/56/3cc19726dec58831872bbedfac31f57e68db1c0bedbb4102714f0a45ef66/rust_just-1.58.0-py3-none-win32.whl", hash = "sha256:0e9baefc1464ab81a337f559e25a5c0c7f3d5c993d2fcd9ba1bc2585ab4bbac2", size = 2137004, upload-time = "2026-08-04T02:59:18.417Z" }, + { url = "https://files.pythonhosted.org/packages/fa/31/234039ddfd4fc10dc16679063d10848423fee6ab13aac3f5d8ce5d1d8b27/rust_just-1.58.0-py3-none-win_amd64.whl", hash = "sha256:145cea724b6d981422ad5357ac6fec53be62b8146ac67a3921c89a0db152887d", size = 2358021, upload-time = "2026-08-04T02:59:19.817Z" }, +] + [[package]] name = "send2trash" version = "2.1.0" From d9e9eabdebb2b5354e25ed61830642ad41524acb Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 25 Aug 2026 16:07:19 +0100 Subject: [PATCH 10/79] Update contributing to use uv, just --- contribute.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/contribute.md b/contribute.md index d41fb94b..220c36a8 100644 --- a/contribute.md +++ b/contribute.md @@ -13,10 +13,15 @@ Major changes should follow the RFC process as it was laid out in [RFC1](https:/ ## Building the documentation Build and inspect changes to the documentation before submitting a PR. -To do so, you first need to install the necessary dependencies: + +This project uses [`uv`](https://docs.astral.sh/uv) to manage its required (python) tooling, +and [`just`](https://github.com/casey/just) to run common development tasks. + +[Install `uv`](https://docs.astral.sh/uv/#installation), +then set up an environment with the correct python version and development dependencies with ```bash -pip install . +uv sync ``` This document uses [jupyter-book](https://jupyterbook.org) to generate the pages @@ -25,12 +30,17 @@ After installing these via the dependencies, navigate into the repository on your machine and build the book using the following command: ```bash -python pre_build.py -jupyter book start +just serve ``` This will build the book and start a local server to inspect the changes in your browser. +To generate the "production" output in the `./_build/` directory, use + +```bash +just build +``` + ## First contribution If you haven't contributed to the spec before, @@ -51,7 +61,7 @@ make sure to rebuild the `CITATION.cff` file in the root of this repository. To do so, run the following command: ```bash -jupyter book build --cff +just cff ``` Make sure the updated `CITATION.cff` file is included in your PR. @@ -162,4 +172,4 @@ Before creating a release, please make sure to go through the following items to - [ ] Update versions in examples. Go through the examples in the `examples/` and make sure that all version numbers in the `.json` files are up-to-date. - [ ] Update the specification number in the spec text. The [spec text](./index.md) mentions its own version number in several places. Please make sure to update those to the new version. - [ ] Make sure all tests are passing. Run the test suite to make sure that all tests are passing before creating a release. -- [ ] Update the version history. Add a new entry to the [version history](#ngff-spec:history) file with the new version number and date, and a summary of the changes made in this release. \ No newline at end of file +- [ ] Update the version history. Add a new entry to the [version history](#ngff-spec:history) file with the new version number and date, and a summary of the changes made in this release. From 22131062aa0191a2f401960758b6d5629a81e59e Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 25 Aug 2026 16:09:38 +0100 Subject: [PATCH 11/79] More just docs --- contribute.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contribute.md b/contribute.md index 220c36a8..74b15811 100644 --- a/contribute.md +++ b/contribute.md @@ -41,6 +41,12 @@ To generate the "production" output in the `./_build/` directory, use just build ``` +To see all available recipes, use + +```bash +just +``` + ## First contribution If you haven't contributed to the spec before, From eb227a48cd8260d23ffe7c8db7c85c8d3a4f1bd9 Mon Sep 17 00:00:00 2001 From: Valentin Boussot Date: Fri, 28 Aug 2026 09:40:10 +0200 Subject: [PATCH 12/79] fix: describe byDimension axes as indices, and a typo in image.schema (#195) * fix: describe byDimension inputAxes and outputAxes as indices The two descriptions read "Names of the input axes" and "Names of the output axes" while both arrays hold numbers. The spec text is already explicit that these are positions: the transformation table gives "inputAxes": List[number], the byDimension section states that the values are arrays of integers, and tests/attributes/spec/invalid holds a fixture that uses axis names precisely so it is rejected. Also fixes a typo in the sequence description of image.schema. Closes #179 * docs: add Valentin Boussot to the authors CITATION.cff regenerated with `jupyter book build --cff`, as the contribution guide asks. --- CITATION.cff | 3 +++ authors.yml | 3 +++ schemas/coordinate_transformations.schema | 4 ++-- schemas/image.schema | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 8d77f61e..79a8c57a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -92,6 +92,9 @@ authors: - family-names: Best given-names: Benedikt T. orcid: 0000-0001-6965-1117 + - family-names: Boussot + given-names: Valentin + orcid: 0009-0003-2465-5458 - family-names: Comparin given-names: Tommaso orcid: 0000-0001-6853-5931 diff --git a/authors.yml b/authors.yml index 5c2d9174..fbe09819 100644 --- a/authors.yml +++ b/authors.yml @@ -111,6 +111,9 @@ project: - name: Benedikt T. Best github: btbest orcid: 0000-0001-6965-1117 + - name: Valentin Boussot + github: vboussot + orcid: 0009-0003-2465-5458 # C - name: Tommaso Comparin diff --git a/schemas/coordinate_transformations.schema b/schemas/coordinate_transformations.schema index ccb9162a..23060715 100644 --- a/schemas/coordinate_transformations.schema +++ b/schemas/coordinate_transformations.schema @@ -372,14 +372,14 @@ "items": { "type": "number" }, - "description": "Names of the input axes for this transformation." + "description": "Indices of the input axes for this transformation." }, "outputAxes": { "type": "array", "items": { "type": "number" }, - "description": "Names of the output axes for this transformation." + "description": "Indices of the output axes for this transformation." } }, "required": [ diff --git a/schemas/image.schema b/schemas/image.schema index 379b00f4..c0417d62 100644 --- a/schemas/image.schema +++ b/schemas/image.schema @@ -113,7 +113,7 @@ ] }, { - "description": "A sequence of a ingle scale followed by a single translation", + "description": "A sequence of a single scale followed by a single translation", "type": "object", "properties": { "type": {"const": "sequence"}, From c9c1851153bc3f9ab1df588bd0eb035c09f0f45f Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Fri, 28 Aug 2026 10:07:06 +0100 Subject: [PATCH 13/79] Change input name from 'intrinsic' to 'physical' (#199) Intrinsic is not a defined coordinate system. --- tests/attributes/strict/valid/image/image_omero.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/attributes/strict/valid/image/image_omero.json b/tests/attributes/strict/valid/image/image_omero.json index c61a7d70..5768188c 100644 --- a/tests/attributes/strict/valid/image/image_omero.json +++ b/tests/attributes/strict/valid/image/image_omero.json @@ -107,7 +107,7 @@ 21.58 ], "type": "translation", - "input": {"name": "intrinsic"}, + "input": {"name": "physical"}, "output": {"name": "world"} } ], @@ -164,4 +164,4 @@ }, "strict": true } -} \ No newline at end of file +} From c69c54c2cd7f7bc36845c9c81d24c7e2721fd251 Mon Sep 17 00:00:00 2001 From: Tiago Lubiana Date: Fri, 28 Aug 2026 18:10:15 -0300 Subject: [PATCH 14/79] Fix table formatting for multiscale image metadata (#185) * Fix table formatting for multiscale image metadata Updated table formatting for fields in index.md to correct alignment. * Fix table formatting in multiscales section * Move the "multiscale-md" heading up Give the multiscale specification a position higher up in the document * Fix typos in index.md documentation affine --> rotation in the rotation section; a object -> an object * Revert "Move the "multiscale-md" heading up" This reverts commit e9f74680c90c289dd9b1955c3f64caa07826696d. --------- Co-authored-by: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/index.md b/index.md index da28878a..30ed17b0 100644 --- a/index.md +++ b/index.md @@ -423,7 +423,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: @@ -465,7 +465,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. @@ -970,7 +970,7 @@ The matrix MUST be stored as a 2D array either as json or in a Zarr array. `rotation` transformations are invertible. **path** -: The path to an array containing the affine parameters. +: The path to an array containing the rotation parameters. The array at this path MUST be 2D whose shape MUST be `N x N`. **rotation** @@ -1101,7 +1101,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`, @@ -1276,8 +1276,8 @@ It is stored in a multiple resolution representation. `multiscales` contains an array of objects where each entry describes a multiscale image. Each object provides the following fields: -| | Field | Type | Required | Description | -| --- | --- | --- | --- | --- | +| Field | Type | Required | Description | +| --- | --- | --- | --- | | `coordinateSystems` | JSON array of objects | yes | [Coordinate system metadata](#coordinate-systems-md) for the multiscale image. | | `datasets` | JSON array of objects | yes | Metadata about arrays storing the individual resolution levels. | | `coordinateTransformations` | JSON array of objects | no | Metadata about transformations that are applied to all resolution levels in the same manner. | @@ -1460,7 +1460,7 @@ which is an array of objects describing the channels of the image. Each object 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 object in `channels` MUST contain the field `window`, -which is a object describing the windowing of the channel. +which is an object 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`, @@ -1860,7 +1860,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 a1189a13a772dbbc5aa4898e0eb71350783e5305 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 11:48:59 +0100 Subject: [PATCH 15/79] Remove strict schemas and tests --- conformance/ome_zarr_conformance.py | 28 ++- examples/label/.config.json | 3 + .../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 + .../{plate_strict => plate}/plate_2wells.json | 0 .../{plate_strict => plate}/plate_6wells.json | 0 examples/plate_strict/.config.json | 3 - examples/well/.config.json | 3 + .../{well_strict => well}/well_2fields.json | 0 .../{well_strict => well}/well_4fields.json | 0 examples/well_strict/.config.json | 3 - index.md | 14 +- 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 - .../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 -- tests/test_attributes.py | 22 +-- tests/test_validation.py | 25 ++- .../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 --- version_history.md | 7 + 55 files changed, 54 insertions(+), 1755 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 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 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/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py index 5614e44c..3b3f091c 100644 --- a/conformance/ome_zarr_conformance.py +++ b/conformance/ome_zarr_conformance.py @@ -8,17 +8,19 @@ """ 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") @@ -80,14 +82,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/")) @@ -201,12 +200,6 @@ def main(raw_args=None): action="append", help="regular expression pattern for test names to exclude; can be given multiple times", ) - parser.add_argument( - "--exclude-strict", - "-S", - action="store_true", - help="exclude strict tests", - ) parser.add_argument( "--exclude-invalid", "-I", @@ -241,7 +234,7 @@ 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 dingus_args is None: print( @@ -267,7 +260,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/examples/label/.config.json b/examples/label/.config.json new file mode 100644 index 00000000..d98e19c0 --- /dev/null +++ b/examples/label/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/label.schema" +} \ No newline at end of file diff --git a/examples/label_strict/colors_properties.json b/examples/label/colors_properties.json similarity index 100% rename from examples/label_strict/colors_properties.json rename to examples/label/colors_properties.json diff --git a/examples/label_strict/.config.json b/examples/label_strict/.config.json deleted file mode 100644 index e7329dc9..00000000 --- a/examples/label_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_label.schema" -} diff --git a/examples/multiscales/.config.json b/examples/multiscales/.config.json new file mode 100644 index 00000000..029ae09c --- /dev/null +++ b/examples/multiscales/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/image.schema" +} \ No newline at end of file diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales/multiscales_example.json similarity index 100% rename from examples/multiscales_strict/multiscales_example.json rename to examples/multiscales/multiscales_example.json diff --git a/examples/multiscales_strict/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json similarity index 100% rename from examples/multiscales_strict/multiscales_example_relative.json rename to examples/multiscales/multiscales_example_relative.json diff --git a/examples/multiscales_strict/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json similarity index 100% rename from examples/multiscales_strict/multiscales_reference_to_label.json rename to examples/multiscales/multiscales_reference_to_label.json diff --git a/examples/multiscales_strict/multiscales_transformations.json b/examples/multiscales/multiscales_transformations.json similarity index 100% rename from examples/multiscales_strict/multiscales_transformations.json rename to examples/multiscales/multiscales_transformations.json diff --git a/examples/multiscales_strict/.config.json b/examples/multiscales_strict/.config.json deleted file mode 100644 index b0469538..00000000 --- a/examples/multiscales_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_image.schema" -} diff --git a/examples/plate/.config.json b/examples/plate/.config.json new file mode 100644 index 00000000..939366ad --- /dev/null +++ b/examples/plate/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/plate.schema" +} \ No newline at end of file diff --git a/examples/plate_strict/plate_2wells.json b/examples/plate/plate_2wells.json similarity index 100% rename from examples/plate_strict/plate_2wells.json rename to examples/plate/plate_2wells.json diff --git a/examples/plate_strict/plate_6wells.json b/examples/plate/plate_6wells.json similarity index 100% rename from examples/plate_strict/plate_6wells.json rename to examples/plate/plate_6wells.json diff --git a/examples/plate_strict/.config.json b/examples/plate_strict/.config.json deleted file mode 100644 index a49b1743..00000000 --- a/examples/plate_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_plate.schema" -} diff --git a/examples/well/.config.json b/examples/well/.config.json new file mode 100644 index 00000000..af9ba888 --- /dev/null +++ b/examples/well/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/well.schema" +} \ No newline at end of file diff --git a/examples/well_strict/well_2fields.json b/examples/well/well_2fields.json similarity index 100% rename from examples/well_strict/well_2fields.json rename to examples/well/well_2fields.json diff --git a/examples/well_strict/well_4fields.json b/examples/well/well_4fields.json similarity index 100% rename from examples/well_strict/well_4fields.json rename to examples/well/well_4fields.json diff --git a/examples/well_strict/.config.json b/examples/well_strict/.config.json deleted file mode 100644 index 129ac69c..00000000 --- a/examples/well_strict/.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "schema": "schemas/strict_well.schema" -} diff --git a/index.md b/index.md index 27a1ca22..35985044 100644 --- a/index.md +++ b/index.md @@ -1456,7 +1456,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 ``` ::: @@ -1615,7 +1615,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 ``` @@ -1639,7 +1639,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 ``` @@ -1718,14 +1718,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 ``` ::: @@ -1754,14 +1754,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 ``` ::: diff --git a/schemas/strict_axes.schema b/schemas/strict_axes.schema deleted file mode 100644 index e05ebbaf..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.9.dev1/schemas/strict_axes.schema", - "title": "NGFF Strict Axes", - "description": "JSON from OME-NGFF .zattrs", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/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 8cc318c3..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.9.dev1/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 593d417e..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.9.dev1/schemas/strict_image.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/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 999eda87..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.9.dev1/schemas/strict_label.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/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 8b936afe..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.9.dev1/schemas/strict_ome_zarr.schema", - "anyOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/bf2raw.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/strict_image.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/strict_label.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/ome.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/strict_plate.schema" - }, - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/strict_well.schema" - } - ] -} diff --git a/schemas/strict_plate.schema b/schemas/strict_plate.schema deleted file mode 100644 index ed99a1f5..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.9.dev1/schemas/strict_plate.schema", - "allOf": [ - { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/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 b0d52908..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.9.dev1/schemas/strict_well.schema", - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/well.schema" -} diff --git a/tests/attributes/strict/invalid/label/no_colors.json b/tests/attributes/strict/invalid/label/no_colors.json deleted file mode 100644 index ebf58d38..00000000 --- a/tests/attributes/strict/invalid/label/no_colors.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 5ee6801b..00000000 --- a/tests/attributes/strict/invalid/plate/missing_acquisition_maximumfieldcount.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.9.dev12", - "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 72be4649..00000000 --- a/tests/attributes/strict/invalid/plate/missing_acquisition_name.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 cd992d74..00000000 --- a/tests/attributes/strict/invalid/plate/missing_name.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ome": { - "version": "0.9.dev12", - "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 2bc13c7c..00000000 --- a/tests/attributes/strict/valid/image/image.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 dcdbff34..00000000 --- a/tests/attributes/strict/valid/image/image_metadata.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "@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 d582a4a1..00000000 --- a/tests/attributes/strict/valid/image/image_omero.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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": "physical"}, - "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.9.dev1" - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} 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 543a496f..00000000 --- a/tests/attributes/strict/valid/image/multiscales_example.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 fd5472b6..00000000 --- a/tests/attributes/strict/valid/image/multiscales_transformations.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 35a1aefe..00000000 --- a/tests/attributes/strict/valid/plate/strict_acquisitions.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 5212db1b..00000000 --- a/tests/attributes/strict/valid/plate/strict_no_acquisitions.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 b3686ac3..00000000 --- a/tests/attributes/strict/valid/well/strict_acquisitions.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "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 311ad142..00000000 --- a/tests/attributes/strict/valid/well/strict_no_acquisitions.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ome": { - "version": "0.9.dev1", - "well": { - "images": [ - { - "path": "0" - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_well.schema" - }, - "description": "Tests for the strict well JSON schema: ", - "strict": true - } -} \ No newline at end of file diff --git a/tests/test_attributes.py b/tests/test_attributes.py index ea13288a..ca106c5f 100644 --- a/tests/test_attributes.py +++ b/tests/test_attributes.py @@ -1,12 +1,15 @@ +import json +import logging 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 +logger = logging.getLogger(__name__) + here = Path(__file__).resolve().parent schema_dir = here.parent.joinpath("schemas") attrs_dir = here / "attributes" @@ -24,9 +27,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")) @@ -57,22 +57,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 3345a714..064b6485 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.9.dev1/schemas/ome_zarr.schema" ] -GENERIC_STRICT_SCHEMA = schema_store[ - "https://ngff.openmicroscopy.org/0.9.dev1/schemas/strict_ome_zarr.schema" -] @dataclass @@ -65,8 +60,8 @@ def pytest_generate_tests(metafunc): if "suite" not in metafunc.fixturenames: return - suites: List[Suite] = [] - ids: List[str] = [] + suites: list[Suite] = [] + ids: list[str] = [] # Validation for filename in glob.glob("tests/*.json"): @@ -127,8 +122,8 @@ def test_example_configs(): if has_examples and not has_config: missing.append(subdir[0]) if missing: - raise Exception(f"Directories missing configs: {missing}") + raise FileNotFoundError(f"Directories missing configs: {missing}") -if __name__ == '__main__': - pytest.main([__file__]) \ No newline at end of file +if __name__ == "__main__": + pytest.main([__file__]) diff --git a/tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json b/tests/zarr/strict/invalid/label/no_colors.ome.zarr/zarr.json deleted file mode 100644 index 8831cb7b..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.9.dev1", - "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 532e9b43..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.9.dev1", - "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 9e4c4ce8..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.9.dev1", - "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 2f95f964..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.9.dev1", - "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 6edaffca..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.9.dev1", - "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 25633449..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.9.dev1", - "@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 6ccb2d19..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.9.dev1", - "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.9.dev1" - } - }, - "_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 76991c3c..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.9.dev1", - "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 b649ee51..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.9.dev1", - "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 8a810107..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.9.dev1", - "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 915efc90..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.9.dev1", - "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 b3da6bb1..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.9.dev1", - "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 52e26f13..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.9.dev1", - "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 diff --git a/version_history.md b/version_history.md index 66a7aa2c..a8355497 100644 --- a/version_history.md +++ b/version_history.md @@ -8,6 +8,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## Unreleased + +### Removed + +- [ome/ngff-spec#138](https://github.com/ome/ngff-spec/issues/138) Strict schemas and test cases + ## 0.9.dev1 - 2026-08-20 ### Added @@ -30,6 +36,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - New `projectAxis` transformation to add or drop dimensions explicitly. ### Changed + - BREAKING CHANGE: Unified `input` and `output` fields in all transformation metadata to be an object of `{"name": string, "path": string}` instead of allowing both string and object forms. This change was made to ensure consistency across all transformations and to simplify the specification. - BREAKING CHANGE: Replaced `arrayCoordinateSystems` with explanation of how to properly express dimensionless transforms. From f76fe7f3f4b971ab1874e7f413503680890bf43d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 12:10:08 +0100 Subject: [PATCH 16/79] 0.9.dev1 -> 0.9.dev2 --- _version.py | 2 +- examples/bf2raw/image.json | 2 +- examples/bf2raw/plate.json | 2 +- examples/label/colors_properties.json | 2 +- examples/multiscales/multiscales_example.json | 6 +-- .../multiscales_example_relative.json | 2 +- .../multiscales_reference_to_label.json | 4 +- .../multiscales_transformations.json | 2 +- examples/ome/series-2.json | 2 +- examples/plate/plate_2wells.json | 2 +- examples/plate/plate_6wells.json | 2 +- examples/scene/scene_registration.json | 4 +- examples/scene/scene_stitching.json | 2 +- examples/subspace/subspacePermute.json | 4 +- .../displacements/displacement_field.json | 4 +- .../displacements/multiscales.json | 4 +- examples/well/well_2fields.json | 2 +- examples/well/well_4fields.json | 2 +- index.md | 12 ++--- schemas/_version.schema | 6 +-- schemas/axes.schema | 2 +- schemas/axis_orientation.schema | 2 +- schemas/bf2raw.schema | 4 +- schemas/coordinate_systems.schema | 2 +- schemas/coordinate_transformations.schema | 2 +- schemas/image.schema | 46 +++++++++++++------ schemas/label.schema | 4 +- schemas/ome.schema | 4 +- schemas/ome_zarr.schema | 16 +++---- schemas/plate.schema | 4 +- schemas/scene.schema | 4 +- schemas/well.schema | 4 +- .../spec/invalid/image/duplicate_axes.json | 4 +- .../invalid/image/duplicate_orientation.json | 2 +- .../spec/invalid/image/duplicate_scale.json | 4 +- .../invalid/image/empty_transformations.json | 4 +- .../invalid/image/invalid_channels_color.json | 4 +- .../image/invalid_channels_window.json | 4 +- .../invalid_multiscale_transform_input.json | 4 +- ...lid_multiscale_transform_input_output.json | 4 +- .../invalid_multiscale_transform_output.json | 4 +- .../invalid_multiscales_transformations.json | 4 +- .../spec/invalid/image/invalid_path.json | 4 +- .../image/invalid_transformation_type.json | 4 +- .../spec/invalid/image/missing_axes_name.json | 4 +- .../image/missing_coordinate_system_axes.json | 4 +- .../image/missing_coordinate_system_name.json | 4 +- .../image/missing_coordinate_systems.json | 4 +- .../spec/invalid/image/missing_datasets.json | 4 +- .../spec/invalid/image/missing_path.json | 4 +- .../spec/invalid/image/missing_scale.json | 4 +- .../image/missing_transformations.json | 4 +- .../spec/invalid/image/no_axes.json | 4 +- .../spec/invalid/image/no_datasets.json | 4 +- .../spec/invalid/image/no_multiscales.json | 4 +- .../image/non_existent_orientation.json | 2 +- .../image/non_existent_orientation_type.json | 2 +- .../invalid/image/non_space_orientation.json | 2 +- .../spec/invalid/label/colors_duplicate.json | 4 +- .../invalid/label/colors_no_label_value.json | 4 +- .../invalid/label/colors_rgba_length.json | 4 +- .../spec/invalid/label/colors_rgba_type.json | 4 +- .../spec/invalid/label/empty_colors.json | 4 +- .../spec/invalid/label/empty_properties.json | 4 +- .../label/properties_no_label_value.json | 4 +- .../plate/acquisition_negative_starttime.json | 4 +- .../plate/acquisition_noninteger_endtime.json | 4 +- .../acquisition_noninteger_starttime.json | 4 +- .../acquisition_zero_maximumfieldcount.json | 4 +- .../spec/invalid/plate/duplicate_columns.json | 4 +- .../spec/invalid/plate/duplicate_rows-2.json | 4 +- .../spec/invalid/plate/duplicate_rows.json | 4 +- .../spec/invalid/plate/empty_columns.json | 4 +- .../spec/invalid/plate/empty_rows.json | 4 +- .../spec/invalid/plate/empty_wells.json | 4 +- .../invalid/plate/missing_acquisition_id.json | 4 +- .../invalid/plate/missing_column_name.json | 4 +- .../spec/invalid/plate/missing_columns.json | 4 +- .../spec/invalid/plate/missing_row_name.json | 4 +- .../spec/invalid/plate/missing_rows.json | 4 +- .../plate/missing_well_columnIndex.json | 4 +- .../spec/invalid/plate/missing_well_path.json | 4 +- .../invalid/plate/missing_well_rowIndex.json | 4 +- .../spec/invalid/plate/missing_wells.json | 4 +- .../plate/negative_acquisition_id.json | 4 +- .../spec/invalid/plate/negative_endtime.json | 4 +- .../plate/non_alphanumeric_column.json | 4 +- .../plate/non_integer_acquisition_id.json | 4 +- ...integer_acquisition_maximumfieldcount.json | 4 +- .../spec/invalid/plate/well_1group.json | 4 +- .../spec/invalid/plate/well_3groups.json | 4 +- .../spec/invalid/plate/zero_field_count.json | 4 +- ...cene_bijection_forward_missing_params.json | 4 +- ...cene_bijection_inverse_missing_params.json | 4 +- .../scene/scene_input_output_not_object.json | 4 +- .../invalid/scene/scene_missing_scene.json | 4 +- .../scene/scene_missing_transformations.json | 4 +- .../transforms/bad_affine_no_affine.json | 2 +- .../bad_affine_no_input_output.json | 2 +- .../bad_byDimension_no_input_output_axes.json | 2 +- .../bad_byDimension_wrong axes_type.json | 2 +- .../spec/invalid/transforms/bad_mapaxis.json | 2 +- .../spec/invalid/transforms/bad_mapaxis2.json | 2 +- .../spec/invalid/transforms/bad_mapaxis3.json | 2 +- .../spec/invalid/transforms/bad_mapaxis4.json | 2 +- .../spec/invalid/transforms/bad_mapaxis5.json | 2 +- .../bad_projectAxis_insert_non_unique.json | 2 +- .../bad_projectAxis_insert_too_high_dim.json | 2 +- .../bad_projectAxis_insert_too_many.json | 2 +- .../bad_projectAxis_missing_op.json | 2 +- .../bad_projectAxis_remove_non_unique.json | 2 +- .../bad_projectAxis_remove_too_high_dim.json | 2 +- .../bad_projectAxis_remove_too_many.json | 2 +- .../spec/invalid/transforms/bad_rotation.json | 2 +- .../invalid/transforms/bad_rotation2.json | 2 +- .../invalid/transforms/bad_rotation3.json | 2 +- .../bad_scale_path_not_allowed.json | 2 +- .../bad_translate_path_not_allowed.json | 2 +- .../multiscales_transform_forbidden.json | 2 +- .../multiscales_transform_forbidden2.json | 2 +- .../multiscales_transform_forbidden3.json | 2 +- .../multiscales_transform_missing_params.json | 2 +- ...multiscales_transform_no_input_output.json | 2 +- ...ultiscales_transform_no_input_output2.json | 2 +- .../spec/invalid/well/forbidden_path_1.json | 4 +- .../spec/invalid/well/forbidden_path_2.json | 4 +- .../spec/invalid/well/forbidden_path_3.json | 4 +- .../spec/invalid/well/forbidden_path_4.json | 4 +- .../spec/valid/image/custom_type_axes.json | 4 +- .../spec/valid/image/invalid_axis_units.json | 4 +- .../spec/valid/image/many_axes.json | 4 +- .../spec/valid/image/many_space_axes.json | 2 +- .../spec/valid/image/mismatch_axes_units.json | 4 +- .../spec/valid/image/missing_name.json | 4 +- .../spec/valid/image/missing_space_axes.json | 2 +- .../valid/image/multiscales_orientation.json | 2 +- ...cales_transform_additional_transforms.json | 2 +- ..._transform_additional_transforms_path.json | 2 +- .../image/multiscales_transform_identity.json | 2 +- .../image/multiscales_transform_sequence.json | 2 +- .../image/one_custom_one_space_axis.json | 2 +- .../spec/valid/image/one_space_axes.json | 4 +- .../spec/valid/image/single_axis.json | 4 +- .../spec/valid/image/untyped_axes.json | 4 +- .../attributes/spec/valid/label/minimal.json | 4 +- .../spec/valid/label/minimal_properties.json | 4 +- .../spec/valid/omero/full_omero_metadata.json | 2 +- .../valid/plate/minimal_acquisitions.json | 4 +- .../valid/plate/minimal_no_acquisitions.json | 4 +- .../valid/plate/non_alphanumeric_row.json | 4 +- tests/attributes/spec/valid/scene/scene.json | 4 +- .../spec/valid/scene/tile_stitching.json | 4 +- .../spec/valid/transforms/affine.json | 2 +- .../spec/valid/transforms/affineParams.json | 2 +- .../spec/valid/transforms/byDimension.json | 4 +- .../spec/valid/transforms/identity.json | 2 +- .../spec/valid/transforms/mapAxis.json | 2 +- .../spec/valid/transforms/projectAxis.json | 2 +- .../spec/valid/transforms/projectAxis2.json | 2 +- .../spec/valid/transforms/rotation.json | 2 +- .../spec/valid/transforms/scale.json | 2 +- .../spec/valid/well/minimal_acquisitions.json | 4 +- .../valid/well/minimal_no_acquisition.json | 4 +- .../valid/well/minimal_path_special_char.json | 4 +- tests/test_validation.py | 2 +- .../image/duplicate_axes.ome.zarr/zarr.json | 4 +- .../duplicate_orientation.ome.zarr/zarr.json | 2 +- .../image/duplicate_scale.ome.zarr/zarr.json | 4 +- .../empty_transformations.ome.zarr/zarr.json | 4 +- .../invalid_channels_color.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../image/invalid_path.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../invalid/image/many_space_axes.ome.zarr | 4 +- .../image/missing_axes.ome.zarr/zarr.json | 4 +- .../missing_axes_name.ome.zarr/zarr.json | 4 +- .../image/missing_datasets.ome.zarr/zarr.json | 4 +- .../image/missing_path.ome.zarr/zarr.json | 4 +- .../image/missing_scale.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../invalid/image/no_axes.ome.zarr/zarr.json | 4 +- .../image/no_datasets.ome.zarr/zarr.json | 4 +- .../image/no_multiscales.ome.zarr/zarr.json | 4 +- .../zarr.json | 2 +- .../zarr.json | 2 +- .../non_space_orientation.ome.zarr/zarr.json | 2 +- .../label/colors_duplicate.ome.zarr/zarr.json | 4 +- .../colors_no_label_value.ome.zarr/zarr.json | 4 +- .../colors_rgba_length.ome.zarr/zarr.json | 4 +- .../label/colors_rgba_type.ome.zarr/zarr.json | 4 +- .../label/empty_colors.ome.zarr/zarr.json | 4 +- .../label/empty_properties.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../duplicate_columns.ome.zarr/zarr.json | 4 +- .../plate/duplicate_rows-2.ome.zarr/zarr.json | 4 +- .../plate/duplicate_rows.ome.zarr/zarr.json | 4 +- .../plate/empty_columns.ome.zarr/zarr.json | 4 +- .../plate/empty_rows.ome.zarr/zarr.json | 4 +- .../plate/empty_wells.ome.zarr/zarr.json | 4 +- .../missing_acquisition_id.ome.zarr/zarr.json | 4 +- .../missing_column_name.ome.zarr/zarr.json | 4 +- .../plate/missing_columns.ome.zarr/zarr.json | 4 +- .../plate/missing_row_name.ome.zarr/zarr.json | 4 +- .../plate/missing_rows.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../missing_well_path.ome.zarr/zarr.json | 4 +- .../missing_well_rowIndex.ome.zarr/zarr.json | 4 +- .../plate/missing_wells.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../plate/negative_endtime.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../zarr.json | 4 +- .../plate/well_1group.ome.zarr/zarr.json | 4 +- .../plate/well_3groups.ome.zarr/zarr.json | 4 +- .../plate/zero_field_count.ome.zarr/zarr.json | 4 +- .../image/custom_axis_type.ome.zarr/zarr.json | 2 +- .../image/custom_type_axes.ome.zarr/zarr.json | 4 +- .../invalid_axis_units.ome.zarr/zarr.json | 4 +- .../valid/image/many_axes.ome.zarr/zarr.json | 4 +- .../mismatch_axes_units.ome.zarr/zarr.json | 4 +- .../image/missing_name.ome.zarr/zarr.json | 4 +- .../missing_space_axes.ome.zarr/zarr.json | 4 +- .../image/one_space_axes.ome.zarr/zarr.json | 4 +- .../image/orientation.ome.zarr/zarr.json | 2 +- .../image/single_axis.ome.zarr/zarr.json | 4 +- .../image/untyped_axes.ome.zarr/zarr.json | 4 +- .../valid/label/minimal.ome.zarr/zarr.json | 4 +- .../minimal_properties.ome.zarr/zarr.json | 4 +- .../minimal_acquisitions.ome.zarr/zarr.json | 4 +- .../zarr.json | 4 +- .../non_alphanumeric_row.ome.zarr/zarr.json | 4 +- .../minimal_acquisitions.ome.zarr/zarr.json | 4 +- .../minimal_no_acquisition.ome.zarr/zarr.json | 4 +- 239 files changed, 449 insertions(+), 431 deletions(-) diff --git a/_version.py b/_version.py index 46f48909..6560be4d 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -__version__ = '0.9.dev1' +__version__ = "0.9.dev2" diff --git a/examples/bf2raw/image.json b/examples/bf2raw/image.json index 8d5af1ff..60299c4e 100644 --- a/examples/bf2raw/image.json +++ b/examples/bf2raw/image.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "bioformats2raw.layout": 3 } } diff --git a/examples/bf2raw/plate.json b/examples/bf2raw/plate.json index eb1bb5d4..08f9ca95 100644 --- a/examples/bf2raw/plate.json +++ b/examples/bf2raw/plate.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "bioformats2raw.layout": 3, "plate": { "columns": [ diff --git a/examples/label/colors_properties.json b/examples/label/colors_properties.json index a31ac0cc..ee3d9d13 100644 --- a/examples/label/colors_properties.json +++ b/examples/label/colors_properties.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/examples/multiscales/multiscales_example.json b/examples/multiscales/multiscales_example.json index dc94c15a..0b33ebc3 100644 --- a/examples/multiscales/multiscales_example.json +++ b/examples/multiscales/multiscales_example.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "example", @@ -51,7 +51,7 @@ "type": "translation", "translation": [0, 0, 0.25, 0.25, 0.25] } - ] + ] } ] }, @@ -90,4 +90,4 @@ ] } } -} \ No newline at end of file +} diff --git a/examples/multiscales/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json index 3922338b..da22de0d 100644 --- a/examples/multiscales/multiscales_example_relative.json +++ b/examples/multiscales/multiscales_example_relative.json @@ -1,7 +1,7 @@ { "multiscales": [ { - "version": "0.9.dev1", + "version": "0.9.dev2", "name": "example", "coordinateSystems" : [ { diff --git a/examples/multiscales/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json index 33b85a42..450a4b1b 100644 --- a/examples/multiscales/multiscales_reference_to_label.json +++ b/examples/multiscales/multiscales_reference_to_label.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "Image", @@ -37,4 +37,4 @@ } ] } -} \ No newline at end of file +} diff --git a/examples/multiscales/multiscales_transformations.json b/examples/multiscales/multiscales_transformations.json index 921f800e..456dd640 100644 --- a/examples/multiscales/multiscales_transformations.json +++ b/examples/multiscales/multiscales_transformations.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/examples/ome/series-2.json b/examples/ome/series-2.json index afcb188e..c88ba04a 100644 --- a/examples/ome/series-2.json +++ b/examples/ome/series-2.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "series": ["0", "1"] } } diff --git a/examples/plate/plate_2wells.json b/examples/plate/plate_2wells.json index 1a8a5a1e..7791eb9e 100644 --- a/examples/plate/plate_2wells.json +++ b/examples/plate/plate_2wells.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { diff --git a/examples/plate/plate_6wells.json b/examples/plate/plate_6wells.json index 9e5689e1..b0644b0e 100644 --- a/examples/plate/plate_6wells.json +++ b/examples/plate/plate_6wells.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { diff --git a/examples/scene/scene_registration.json b/examples/scene/scene_registration.json index 0f6b15cb..9ddb068f 100644 --- a/examples/scene/scene_registration.json +++ b/examples/scene/scene_registration.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateTransformations": [ { @@ -84,4 +84,4 @@ } } } -} \ No newline at end of file +} diff --git a/examples/scene/scene_stitching.json b/examples/scene/scene_stitching.json index 1355927f..1e5930ef 100644 --- a/examples/scene/scene_stitching.json +++ b/examples/scene/scene_stitching.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateTransformations": [ { diff --git a/examples/subspace/subspacePermute.json b/examples/subspace/subspacePermute.json index 8c69a0ab..72336949 100644 --- a/examples/subspace/subspacePermute.json +++ b/examples/subspace/subspacePermute.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -68,4 +68,4 @@ ] } } -} \ No newline at end of file +} diff --git a/examples/transformations/displacements/displacement_field.json b/examples/transformations/displacements/displacement_field.json index e63db5c4..a421adb3 100644 --- a/examples/transformations/displacements/displacement_field.json +++ b/examples/transformations/displacements/displacement_field.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "name": "the_dfield", "multiscales": [ { @@ -30,4 +30,4 @@ } ] } -} \ No newline at end of file +} diff --git a/examples/transformations/displacements/multiscales.json b/examples/transformations/displacements/multiscales.json index bff6eaa3..8c044baf 100644 --- a/examples/transformations/displacements/multiscales.json +++ b/examples/transformations/displacements/multiscales.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "name": "some_image", "multiscales": [ { @@ -44,4 +44,4 @@ } ] } -} \ No newline at end of file +} diff --git a/examples/well/well_2fields.json b/examples/well/well_2fields.json index a0125337..2692ab4b 100644 --- a/examples/well/well_2fields.json +++ b/examples/well/well_2fields.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { diff --git a/examples/well/well_4fields.json b/examples/well/well_4fields.json index f39e722e..349ee8f9 100644 --- a/examples/well/well_4fields.json +++ b/examples/well/well_4fields.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { diff --git a/index.md b/index.md index 35985044..b605ad7b 100644 --- a/index.md +++ b/index.md @@ -4,8 +4,8 @@ short_title: OME-Zarr authors: " " --- -# Version 0.9.dev1 -(ngff-spec:spec:0.9.dev1)= +# Version 0.9.dev2 +(ngff-spec:spec:0.9.dev2)= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -22,7 +22,7 @@ All specifications are submitted to the community for review. ## Status of This Document -The working title version of this specification is 0.9.dev1. +The working title version of this specification is 0.9.dev2. Migration scripts will be provided between numbered versions. Data written with these latest changes will not necessarily be supported. @@ -181,14 +181,14 @@ The OME-Zarr Metadata is stored in the various `zarr.json` files throughout the The OME-Zarr Metadata version MUST be consistent within a hierarchy. The group `attributes` MUST contain a key `ome`. The value of the `ome` key MUST be a JSON -object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec:spec:0.9.dev1). +object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec:spec:0.9.dev2). ```jsonc { // ... "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", // ... } } @@ -1625,7 +1625,7 @@ The `zarr.json` under the `labels` group contains a JSON object with the key `la { "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "labels": [ "cell_segmentation" ] diff --git a/schemas/_version.schema b/schemas/_version.schema index 64e8ebc5..db1602a9 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -1,11 +1,11 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema", "title": "OME-Zarr version", "description": "OME-Zarr version.", "type": "string", "enum": [ "0.9", - "0.9.dev1" + "0.9.dev2" ] -} \ No newline at end of file +} diff --git a/schemas/axes.schema b/schemas/axes.schema index 004e2f39..a0e7b029 100644 --- a/schemas/axes.schema +++ b/schemas/axes.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/axes.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/axes.schema", "title": "Axes", "description": "OME-Zarr Axes.", "type": "array", diff --git a/schemas/axis_orientation.schema b/schemas/axis_orientation.schema index 1a11028e..3dbc036d 100644 --- a/schemas/axis_orientation.schema +++ b/schemas/axis_orientation.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/axis_orientation.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/axis_orientation.schema", "title": "Axis Orientation", "description": "Controlled vocabulary for orientation of each spatial axis according to subject or subject-global reference.", "type": "object", diff --git a/schemas/bf2raw.schema b/schemas/bf2raw.schema index 8a505362..0bd43ced 100644 --- a/schemas/bf2raw.schema +++ b/schemas/bf2raw.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/bf2raw.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/bf2raw.schema", "title": "bioformats2raw", "description": "OME-Zarr bioformats2raw metadata.", "type": "object", @@ -17,7 +17,7 @@ ] }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ diff --git a/schemas/coordinate_systems.schema b/schemas/coordinate_systems.schema index 6dcc3b65..bc442526 100644 --- a/schemas/coordinate_systems.schema +++ b/schemas/coordinate_systems.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_systems.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_systems.schema", "title": "Coordinate systems", "description": "OME-Zarr coordinate system.", "type": "array", diff --git a/schemas/coordinate_transformations.schema b/schemas/coordinate_transformations.schema index 309e5980..502e6529 100644 --- a/schemas/coordinate_transformations.schema +++ b/schemas/coordinate_transformations.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema", "title": "Coordinate Transformations", "description": "OME-Zarr Coordinate transforms.", "type": "array", diff --git a/schemas/image.schema b/schemas/image.schema index d662a7cf..875e3657 100644 --- a/schemas/image.schema +++ b/schemas/image.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/image.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/image.schema", "title": "Image", "description": "OME-Zarr image.", "type": "object", @@ -16,7 +16,7 @@ "$ref": "#/$defs/multiscales" }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ @@ -56,14 +56,16 @@ "description": "A single scale transformation", "allOf": [ { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/scale" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/scale" }, { "type": "object", "properties": { "input": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["path"] } @@ -71,7 +73,9 @@ }, "output": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["name"] } @@ -86,13 +90,17 @@ { "description": "A single identity transformation", "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/identity"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/identity" + }, { "type": "object", "properties": { "input": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["path"] } @@ -100,7 +108,9 @@ }, "output": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["name"] } @@ -121,8 +131,12 @@ "type": "array", "items": { "oneOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/scale"}, - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/translation"} + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/scale" + }, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/translation" + } ] }, "minItems": 2, @@ -130,7 +144,9 @@ }, "input": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["path"] } @@ -138,7 +154,9 @@ }, "output": { "allOf": [ - {"$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/inputOutput"}, + { + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/inputOutput" + }, { "required": ["name"] } @@ -165,7 +183,7 @@ "type": "array", "minItems": 1, "items": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_systems.schema#/$defs/coordinateSystem" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_systems.schema#/$defs/coordinateSystem" } }, "coordinateTransformations": { @@ -174,7 +192,7 @@ "items": { "allOf": [ { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/coordinate_transformations.schema#/$defs/coordinateTransformation", + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/coordinateTransformation", "description": "Parameters of any possible transform" }, { diff --git a/schemas/label.schema b/schemas/label.schema index ae6d8b4e..1700e34d 100644 --- a/schemas/label.schema +++ b/schemas/label.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/label.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/label.schema", "title": "Label", "description": "OME-Zarr label.", "type": "object", @@ -13,7 +13,7 @@ "$ref": "#/$defs/image-label" }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ diff --git a/schemas/ome.schema b/schemas/ome.schema index 69efecdc..f14bb5cd 100644 --- a/schemas/ome.schema +++ b/schemas/ome.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/ome.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/ome.schema", "title": "OME", "description": "OME-Zarr OME metadata.", "type": "object", @@ -18,7 +18,7 @@ "minContains": 1 }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ diff --git a/schemas/ome_zarr.schema b/schemas/ome_zarr.schema index 6f4fa1ff..9fc15ee3 100644 --- a/schemas/ome_zarr.schema +++ b/schemas/ome_zarr.schema @@ -1,29 +1,29 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/ome_zarr.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/ome_zarr.schema", "title": "OME-Zarr", "description": "Any OME-Zarr dataset.", "anyOf": [ { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/bf2raw.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/bf2raw.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/image.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/image.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/label.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/label.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/ome.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/ome.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/plate.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/plate.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/well.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/well.schema" }, { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/scene.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/scene.schema" } ] } diff --git a/schemas/plate.schema b/schemas/plate.schema index 978c00fe..966ee03c 100644 --- a/schemas/plate.schema +++ b/schemas/plate.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/plate.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/plate.schema", "title": "Plate", "description": "OME-Zarr plate.", "type": "object", @@ -138,7 +138,7 @@ ] }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ diff --git a/schemas/scene.schema b/schemas/scene.schema index 10f0d7c3..dafada9d 100644 --- a/schemas/scene.schema +++ b/schemas/scene.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/scene.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/scene.schema", "title": "Scene", "description": "Scene metadata combining coordinate systems and coordinate transformations to define spatial relationships", "type": "object", @@ -9,7 +9,7 @@ "type": "object", "properties": { "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" }, "scene":{ "properties": { diff --git a/schemas/well.schema b/schemas/well.schema index 2d05d0a6..08143c37 100644 --- a/schemas/well.schema +++ b/schemas/well.schema @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/well.schema", + "$id": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/well.schema", "title": "Well", "description": "OME-Zarr well.", "type": "object", @@ -48,7 +48,7 @@ ] }, "version": { - "$ref": "https://ngff.openmicroscopy.org/0.9.dev1/schemas/_version.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/_version.schema" } }, "required": [ diff --git a/tests/attributes/spec/invalid/image/duplicate_axes.json b/tests/attributes/spec/invalid/image/duplicate_axes.json index 4c02f7d6..73849bb1 100644 --- a/tests/attributes/spec/invalid/image/duplicate_axes.json +++ b/tests/attributes/spec/invalid/image/duplicate_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/duplicate_orientation.json b/tests/attributes/spec/invalid/image/duplicate_orientation.json index 371908c9..72f92916 100644 --- a/tests/attributes/spec/invalid/image/duplicate_orientation.json +++ b/tests/attributes/spec/invalid/image/duplicate_orientation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/image/duplicate_scale.json b/tests/attributes/spec/invalid/image/duplicate_scale.json index 97e9b95d..96590047 100644 --- a/tests/attributes/spec/invalid/image/duplicate_scale.json +++ b/tests/attributes/spec/invalid/image/duplicate_scale.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -54,4 +54,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/empty_transformations.json b/tests/attributes/spec/invalid/image/empty_transformations.json index 530e280d..b0baf66c 100644 --- a/tests/attributes/spec/invalid/image/empty_transformations.json +++ b/tests/attributes/spec/invalid/image/empty_transformations.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -35,4 +35,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_channels_color.json b/tests/attributes/spec/invalid/image/invalid_channels_color.json index 6ae547e9..a89c7c56 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_color.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_color.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -60,4 +60,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_channels_window.json b/tests/attributes/spec/invalid/image/invalid_channels_window.json index ef2abd95..8990cc5d 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_window.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_window.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -60,4 +60,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json index 493b1672..2b565633 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input_output.json b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input_output.json index 8c2e2e7f..b142ad56 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input_output.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input_output.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json index f8818818..02b43760 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json b/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json index 37460825..66fbca49 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -53,4 +53,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_path.json b/tests/attributes/spec/invalid/image/invalid_path.json index 40abd2f1..dec19824 100644 --- a/tests/attributes/spec/invalid/image/invalid_path.json +++ b/tests/attributes/spec/invalid/image/invalid_path.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/invalid_transformation_type.json b/tests/attributes/spec/invalid/image/invalid_transformation_type.json index 936618ac..1061d605 100644 --- a/tests/attributes/spec/invalid/image/invalid_transformation_type.json +++ b/tests/attributes/spec/invalid/image/invalid_transformation_type.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_axes_name.json b/tests/attributes/spec/invalid/image/missing_axes_name.json index 7f18f396..254f8460 100644 --- a/tests/attributes/spec/invalid/image/missing_axes_name.json +++ b/tests/attributes/spec/invalid/image/missing_axes_name.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -43,4 +43,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json b/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json index 85054ea7..5bd8cc53 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -33,4 +33,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json b/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json index d427c554..aef01c1f 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -42,4 +42,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_systems.json b/tests/attributes/spec/invalid/image/missing_coordinate_systems.json index dd358dd9..51e39016 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_systems.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_systems.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "datasets": [ @@ -28,4 +28,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_datasets.json b/tests/attributes/spec/invalid/image/missing_datasets.json index d7581800..0c85f37e 100644 --- a/tests/attributes/spec/invalid/image/missing_datasets.json +++ b/tests/attributes/spec/invalid/image/missing_datasets.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -29,4 +29,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_path.json b/tests/attributes/spec/invalid/image/missing_path.json index 1a26fec8..682a2d0f 100644 --- a/tests/attributes/spec/invalid/image/missing_path.json +++ b/tests/attributes/spec/invalid/image/missing_path.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -44,4 +44,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_scale.json b/tests/attributes/spec/invalid/image/missing_scale.json index 7dd8a46d..dbff93b6 100644 --- a/tests/attributes/spec/invalid/image/missing_scale.json +++ b/tests/attributes/spec/invalid/image/missing_scale.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -45,4 +45,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/missing_transformations.json b/tests/attributes/spec/invalid/image/missing_transformations.json index e06e2cc3..b497510f 100644 --- a/tests/attributes/spec/invalid/image/missing_transformations.json +++ b/tests/attributes/spec/invalid/image/missing_transformations.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -34,4 +34,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/no_axes.json b/tests/attributes/spec/invalid/image/no_axes.json index 4fc6f51b..56bbc915 100644 --- a/tests/attributes/spec/invalid/image/no_axes.json +++ b/tests/attributes/spec/invalid/image/no_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "axes": [], @@ -29,4 +29,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/no_datasets.json b/tests/attributes/spec/invalid/image/no_datasets.json index 3972e4a7..5f54d895 100644 --- a/tests/attributes/spec/invalid/image/no_datasets.json +++ b/tests/attributes/spec/invalid/image/no_datasets.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -30,4 +30,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/no_multiscales.json b/tests/attributes/spec/invalid/image/no_multiscales.json index 2b254c5b..bcc1a010 100644 --- a/tests/attributes/spec/invalid/image/no_multiscales.json +++ b/tests/attributes/spec/invalid/image/no_multiscales.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [] }, "_conformance": { @@ -9,4 +9,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/image/non_existent_orientation.json b/tests/attributes/spec/invalid/image/non_existent_orientation.json index 273887b1..95b07777 100644 --- a/tests/attributes/spec/invalid/image/non_existent_orientation.json +++ b/tests/attributes/spec/invalid/image/non_existent_orientation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/image/non_existent_orientation_type.json b/tests/attributes/spec/invalid/image/non_existent_orientation_type.json index dcdfd3ca..90b4fea9 100644 --- a/tests/attributes/spec/invalid/image/non_existent_orientation_type.json +++ b/tests/attributes/spec/invalid/image/non_existent_orientation_type.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/image/non_space_orientation.json b/tests/attributes/spec/invalid/image/non_space_orientation.json index a5c31f1b..767e9db6 100644 --- a/tests/attributes/spec/invalid/image/non_space_orientation.json +++ b/tests/attributes/spec/invalid/image/non_space_orientation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/label/colors_duplicate.json b/tests/attributes/spec/invalid/label/colors_duplicate.json index 75277233..0cfe947d 100644 --- a/tests/attributes/spec/invalid/label/colors_duplicate.json +++ b/tests/attributes/spec/invalid/label/colors_duplicate.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -31,4 +31,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/colors_no_label_value.json b/tests/attributes/spec/invalid/label/colors_no_label_value.json index 488e2ac0..710ec543 100644 --- a/tests/attributes/spec/invalid/label/colors_no_label_value.json +++ b/tests/attributes/spec/invalid/label/colors_no_label_value.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -21,4 +21,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/colors_rgba_length.json b/tests/attributes/spec/invalid/label/colors_rgba_length.json index f499d6e0..cba0a953 100644 --- a/tests/attributes/spec/invalid/label/colors_rgba_length.json +++ b/tests/attributes/spec/invalid/label/colors_rgba_length.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -21,4 +21,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/colors_rgba_type.json b/tests/attributes/spec/invalid/label/colors_rgba_type.json index e506c800..a8a37f60 100644 --- a/tests/attributes/spec/invalid/label/colors_rgba_type.json +++ b/tests/attributes/spec/invalid/label/colors_rgba_type.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -22,4 +22,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/empty_colors.json b/tests/attributes/spec/invalid/label/empty_colors.json index 84ee40be..6ba61e48 100644 --- a/tests/attributes/spec/invalid/label/empty_colors.json +++ b/tests/attributes/spec/invalid/label/empty_colors.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [] } @@ -12,4 +12,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/empty_properties.json b/tests/attributes/spec/invalid/label/empty_properties.json index 43d7d851..94b46616 100644 --- a/tests/attributes/spec/invalid/label/empty_properties.json +++ b/tests/attributes/spec/invalid/label/empty_properties.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "properties": [] } @@ -12,4 +12,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/label/properties_no_label_value.json b/tests/attributes/spec/invalid/label/properties_no_label_value.json index cb944966..b222b73a 100644 --- a/tests/attributes/spec/invalid/label/properties_no_label_value.json +++ b/tests/attributes/spec/invalid/label/properties_no_label_value.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "properties": [ { @@ -16,4 +16,4 @@ "description": "Tests for the image-label JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/acquisition_negative_starttime.json b/tests/attributes/spec/invalid/plate/acquisition_negative_starttime.json index 2ce4565f..1fed29e1 100644 --- a/tests/attributes/spec/invalid/plate/acquisition_negative_starttime.json +++ b/tests/attributes/spec/invalid/plate/acquisition_negative_starttime.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/acquisition_noninteger_endtime.json b/tests/attributes/spec/invalid/plate/acquisition_noninteger_endtime.json index feeef7e4..6be34edc 100644 --- a/tests/attributes/spec/invalid/plate/acquisition_noninteger_endtime.json +++ b/tests/attributes/spec/invalid/plate/acquisition_noninteger_endtime.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/acquisition_noninteger_starttime.json b/tests/attributes/spec/invalid/plate/acquisition_noninteger_starttime.json index adee822b..7717336c 100644 --- a/tests/attributes/spec/invalid/plate/acquisition_noninteger_starttime.json +++ b/tests/attributes/spec/invalid/plate/acquisition_noninteger_starttime.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/acquisition_zero_maximumfieldcount.json b/tests/attributes/spec/invalid/plate/acquisition_zero_maximumfieldcount.json index 0afde4d4..1d0570b3 100644 --- a/tests/attributes/spec/invalid/plate/acquisition_zero_maximumfieldcount.json +++ b/tests/attributes/spec/invalid/plate/acquisition_zero_maximumfieldcount.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/duplicate_columns.json b/tests/attributes/spec/invalid/plate/duplicate_columns.json index b15a2937..7b2b0a57 100644 --- a/tests/attributes/spec/invalid/plate/duplicate_columns.json +++ b/tests/attributes/spec/invalid/plate/duplicate_columns.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/duplicate_rows-2.json b/tests/attributes/spec/invalid/plate/duplicate_rows-2.json index 33ceb686..41abeac5 100644 --- a/tests/attributes/spec/invalid/plate/duplicate_rows-2.json +++ b/tests/attributes/spec/invalid/plate/duplicate_rows-2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -36,4 +36,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/duplicate_rows.json b/tests/attributes/spec/invalid/plate/duplicate_rows.json index edb9dfb6..41cd938f 100644 --- a/tests/attributes/spec/invalid/plate/duplicate_rows.json +++ b/tests/attributes/spec/invalid/plate/duplicate_rows.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/empty_columns.json b/tests/attributes/spec/invalid/plate/empty_columns.json index 61593284..165c59ea 100644 --- a/tests/attributes/spec/invalid/plate/empty_columns.json +++ b/tests/attributes/spec/invalid/plate/empty_columns.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [], "rows": [ @@ -24,4 +24,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/empty_rows.json b/tests/attributes/spec/invalid/plate/empty_rows.json index cbfc8a6d..ea7d1442 100644 --- a/tests/attributes/spec/invalid/plate/empty_rows.json +++ b/tests/attributes/spec/invalid/plate/empty_rows.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -24,4 +24,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/empty_wells.json b/tests/attributes/spec/invalid/plate/empty_wells.json index b8a8ffbd..e97f078c 100644 --- a/tests/attributes/spec/invalid/plate/empty_wells.json +++ b/tests/attributes/spec/invalid/plate/empty_wells.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -22,4 +22,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_acquisition_id.json b/tests/attributes/spec/invalid/plate/missing_acquisition_id.json index d2646a73..3858e063 100644 --- a/tests/attributes/spec/invalid/plate/missing_acquisition_id.json +++ b/tests/attributes/spec/invalid/plate/missing_acquisition_id.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -33,4 +33,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_column_name.json b/tests/attributes/spec/invalid/plate/missing_column_name.json index 67317db4..89f9af67 100644 --- a/tests/attributes/spec/invalid/plate/missing_column_name.json +++ b/tests/attributes/spec/invalid/plate/missing_column_name.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -28,4 +28,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_columns.json b/tests/attributes/spec/invalid/plate/missing_columns.json index 4058de75..06ef7656 100644 --- a/tests/attributes/spec/invalid/plate/missing_columns.json +++ b/tests/attributes/spec/invalid/plate/missing_columns.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "rows": [ { @@ -23,4 +23,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_row_name.json b/tests/attributes/spec/invalid/plate/missing_row_name.json index 54ee6eb1..e32d13f9 100644 --- a/tests/attributes/spec/invalid/plate/missing_row_name.json +++ b/tests/attributes/spec/invalid/plate/missing_row_name.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -28,4 +28,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_rows.json b/tests/attributes/spec/invalid/plate/missing_rows.json index 1e62ff79..a490d90e 100644 --- a/tests/attributes/spec/invalid/plate/missing_rows.json +++ b/tests/attributes/spec/invalid/plate/missing_rows.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -23,4 +23,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_well_columnIndex.json b/tests/attributes/spec/invalid/plate/missing_well_columnIndex.json index 3757846d..ee40f528 100644 --- a/tests/attributes/spec/invalid/plate/missing_well_columnIndex.json +++ b/tests/attributes/spec/invalid/plate/missing_well_columnIndex.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_well_path.json b/tests/attributes/spec/invalid/plate/missing_well_path.json index 999b8e3f..be742f5b 100644 --- a/tests/attributes/spec/invalid/plate/missing_well_path.json +++ b/tests/attributes/spec/invalid/plate/missing_well_path.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_well_rowIndex.json b/tests/attributes/spec/invalid/plate/missing_well_rowIndex.json index 2b1eb5b1..8936449e 100644 --- a/tests/attributes/spec/invalid/plate/missing_well_rowIndex.json +++ b/tests/attributes/spec/invalid/plate/missing_well_rowIndex.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/missing_wells.json b/tests/attributes/spec/invalid/plate/missing_wells.json index 10754b61..62cc624d 100644 --- a/tests/attributes/spec/invalid/plate/missing_wells.json +++ b/tests/attributes/spec/invalid/plate/missing_wells.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -21,4 +21,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/negative_acquisition_id.json b/tests/attributes/spec/invalid/plate/negative_acquisition_id.json index f5a7e140..355633b5 100644 --- a/tests/attributes/spec/invalid/plate/negative_acquisition_id.json +++ b/tests/attributes/spec/invalid/plate/negative_acquisition_id.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -33,4 +33,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/negative_endtime.json b/tests/attributes/spec/invalid/plate/negative_endtime.json index ca39dc72..7ca5e142 100644 --- a/tests/attributes/spec/invalid/plate/negative_endtime.json +++ b/tests/attributes/spec/invalid/plate/negative_endtime.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/non_alphanumeric_column.json b/tests/attributes/spec/invalid/plate/non_alphanumeric_column.json index 14ba6f07..8f5ae9dc 100644 --- a/tests/attributes/spec/invalid/plate/non_alphanumeric_column.json +++ b/tests/attributes/spec/invalid/plate/non_alphanumeric_column.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -28,4 +28,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/non_integer_acquisition_id.json b/tests/attributes/spec/invalid/plate/non_integer_acquisition_id.json index b34a88b1..3f73bd0d 100644 --- a/tests/attributes/spec/invalid/plate/non_integer_acquisition_id.json +++ b/tests/attributes/spec/invalid/plate/non_integer_acquisition_id.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -33,4 +33,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.json b/tests/attributes/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.json index 7d4fc7cd..bbb38caa 100644 --- a/tests/attributes/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.json +++ b/tests/attributes/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -34,4 +34,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/well_1group.json b/tests/attributes/spec/invalid/plate/well_1group.json index a1798808..d41fcdde 100644 --- a/tests/attributes/spec/invalid/plate/well_1group.json +++ b/tests/attributes/spec/invalid/plate/well_1group.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/well_3groups.json b/tests/attributes/spec/invalid/plate/well_3groups.json index 3504445e..1731f3cd 100644 --- a/tests/attributes/spec/invalid/plate/well_3groups.json +++ b/tests/attributes/spec/invalid/plate/well_3groups.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/plate/zero_field_count.json b/tests/attributes/spec/invalid/plate/zero_field_count.json index 31700b6e..7eca1f22 100644 --- a/tests/attributes/spec/invalid/plate/zero_field_count.json +++ b/tests/attributes/spec/invalid/plate/zero_field_count.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -29,4 +29,4 @@ "description": "Tests for the plate JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json b/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json index b77b92c6..fa15fa57 100644 --- a/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json +++ b/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateSystems": [ { @@ -57,4 +57,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json b/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json index 372039fb..50e4b6f8 100644 --- a/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json +++ b/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateSystems": [ { @@ -58,4 +58,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json b/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json index 9823e916..7237948c 100644 --- a/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json +++ b/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateTransformations": [ { @@ -72,4 +72,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_missing_scene.json b/tests/attributes/spec/invalid/scene/scene_missing_scene.json index 8c0f222b..7e8198db 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_scene.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_scene.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "coordinateSystems": [ { "name": "world", @@ -28,4 +28,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_missing_transformations.json b/tests/attributes/spec/invalid/scene/scene_missing_transformations.json index 50bae35a..b91ad259 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_transformations.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_transformations.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateSystems": [ { @@ -30,4 +30,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json b/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json index a5e02019..c8ec4849 100644 --- a/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json +++ b/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json b/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json index 62842f7a..c23cceb8 100644 --- a/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json +++ b/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json b/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json index 9c3ae6d7..3f84287b 100644 --- a/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json +++ b/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json b/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json index aba5da20..7ddf6c10 100644 --- a/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json +++ b/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis.json index 89ccbe07..b6071181 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json index a47aa5ab..c4f36cf8 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json index a6a42fdf..3bf35b56 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json index 1f81f676..ef4ca097 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json index 355dbf7c..eb2c5128 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json index 175ac94e..97d1463a 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json index d61b6fa8..d255ac4e 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json index be272d0f..cf253658 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json index 9b8a7e6b..f2fee426 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json index 554f03a9..963ab4d3 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json index 41794973..29c1ed18 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json index 3fd586f8..9d4fc9b0 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation.json b/tests/attributes/spec/invalid/transforms/bad_rotation.json index 430a0252..ee7bcd01 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation2.json b/tests/attributes/spec/invalid/transforms/bad_rotation2.json index 676cc273..173fa983 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation2.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation3.json b/tests/attributes/spec/invalid/transforms/bad_rotation3.json index b4adcac5..f1be5e5a 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation3.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation3.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json b/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json index e051b206..97a07779 100644 --- a/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json +++ b/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json b/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json index 1c4cbc73..3856a783 100644 --- a/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json +++ b/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json index 7c56b75f..7f6598e3 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json index 30364313..06d9a734 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json index 7f2010f8..634369d8 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json index dec87b5b..af0c3da0 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json index 0d688a94..d00ddf85 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json index 1bcc730e..b09927fa 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/invalid/well/forbidden_path_1.json b/tests/attributes/spec/invalid/well/forbidden_path_1.json index 732cda60..58092539 100644 --- a/tests/attributes/spec/invalid/well/forbidden_path_1.json +++ b/tests/attributes/spec/invalid/well/forbidden_path_1.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -16,4 +16,4 @@ "valid": false, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/forbidden_path_2.json b/tests/attributes/spec/invalid/well/forbidden_path_2.json index 87373f4a..bc0b400b 100644 --- a/tests/attributes/spec/invalid/well/forbidden_path_2.json +++ b/tests/attributes/spec/invalid/well/forbidden_path_2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -16,4 +16,4 @@ "valid": false, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/forbidden_path_3.json b/tests/attributes/spec/invalid/well/forbidden_path_3.json index 7b998b1d..8b014114 100644 --- a/tests/attributes/spec/invalid/well/forbidden_path_3.json +++ b/tests/attributes/spec/invalid/well/forbidden_path_3.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -16,4 +16,4 @@ "valid": false, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/forbidden_path_4.json b/tests/attributes/spec/invalid/well/forbidden_path_4.json index 0d009ba2..8a2fddbe 100644 --- a/tests/attributes/spec/invalid/well/forbidden_path_4.json +++ b/tests/attributes/spec/invalid/well/forbidden_path_4.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -16,4 +16,4 @@ "valid": false, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/custom_type_axes.json b/tests/attributes/spec/valid/image/custom_type_axes.json index ce0ddc6a..2f7f3103 100644 --- a/tests/attributes/spec/valid/image/custom_type_axes.json +++ b/tests/attributes/spec/valid/image/custom_type_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "id": "schemas/image.schema" } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/invalid_axis_units.json b/tests/attributes/spec/valid/image/invalid_axis_units.json index b51c3eef..aeaa689a 100644 --- a/tests/attributes/spec/valid/image/invalid_axis_units.json +++ b/tests/attributes/spec/valid/image/invalid_axis_units.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -44,4 +44,4 @@ "id": "schemas/image.schema" } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/many_axes.json b/tests/attributes/spec/valid/image/many_axes.json index 7a68616d..f50955ff 100644 --- a/tests/attributes/spec/valid/image/many_axes.json +++ b/tests/attributes/spec/valid/image/many_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -63,4 +63,4 @@ }, "valid": true } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/many_space_axes.json b/tests/attributes/spec/valid/image/many_space_axes.json index 8abb1db2..cb337154 100644 --- a/tests/attributes/spec/valid/image/many_space_axes.json +++ b/tests/attributes/spec/valid/image/many_space_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/attributes/spec/valid/image/mismatch_axes_units.json b/tests/attributes/spec/valid/image/mismatch_axes_units.json index 49fab4ab..08620256 100644 --- a/tests/attributes/spec/valid/image/mismatch_axes_units.json +++ b/tests/attributes/spec/valid/image/mismatch_axes_units.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "id": "schemas/image.schema" } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/missing_name.json b/tests/attributes/spec/valid/image/missing_name.json index 03fc233f..5a3526dd 100644 --- a/tests/attributes/spec/valid/image/missing_name.json +++ b/tests/attributes/spec/valid/image/missing_name.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "datasets": [ @@ -56,4 +56,4 @@ "id": "schemas/image.schema" } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/missing_space_axes.json b/tests/attributes/spec/valid/image/missing_space_axes.json index 8651ded1..61d9c731 100644 --- a/tests/attributes/spec/valid/image/missing_space_axes.json +++ b/tests/attributes/spec/valid/image/missing_space_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/attributes/spec/valid/image/multiscales_orientation.json b/tests/attributes/spec/valid/image/multiscales_orientation.json index e61f81b3..702d1a0e 100644 --- a/tests/attributes/spec/valid/image/multiscales_orientation.json +++ b/tests/attributes/spec/valid/image/multiscales_orientation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json index 360bbd24..bb601c77 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json index 514c0ece..66d32fa1 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/image/multiscales_transform_identity.json b/tests/attributes/spec/valid/image/multiscales_transform_identity.json index 306bfa99..ff466a5c 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_identity.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_identity.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/image/multiscales_transform_sequence.json b/tests/attributes/spec/valid/image/multiscales_transform_sequence.json index cd22d493..22151083 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_sequence.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_sequence.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/image/one_custom_one_space_axis.json b/tests/attributes/spec/valid/image/one_custom_one_space_axis.json index efb65b5b..4b4fbf86 100644 --- a/tests/attributes/spec/valid/image/one_custom_one_space_axis.json +++ b/tests/attributes/spec/valid/image/one_custom_one_space_axis.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/attributes/spec/valid/image/one_space_axes.json b/tests/attributes/spec/valid/image/one_space_axes.json index 668671d3..33a4fd4d 100644 --- a/tests/attributes/spec/valid/image/one_space_axes.json +++ b/tests/attributes/spec/valid/image/one_space_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -48,4 +48,4 @@ }, "valid": true } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/single_axis.json b/tests/attributes/spec/valid/image/single_axis.json index 1b7749c5..596ca0fa 100644 --- a/tests/attributes/spec/valid/image/single_axis.json +++ b/tests/attributes/spec/valid/image/single_axis.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -40,4 +40,4 @@ }, "valid": true } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/image/untyped_axes.json b/tests/attributes/spec/valid/image/untyped_axes.json index 887728e5..34387b66 100644 --- a/tests/attributes/spec/valid/image/untyped_axes.json +++ b/tests/attributes/spec/valid/image/untyped_axes.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -48,4 +48,4 @@ "id": "schemas/image.schema" } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/label/minimal.json b/tests/attributes/spec/valid/label/minimal.json index 3c47e6f6..0d3ea60c 100644 --- a/tests/attributes/spec/valid/label/minimal.json +++ b/tests/attributes/spec/valid/label/minimal.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -21,4 +21,4 @@ }, "description": "Tests for the image-label JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/label/minimal_properties.json b/tests/attributes/spec/valid/label/minimal_properties.json index a63006ef..716caa47 100644 --- a/tests/attributes/spec/valid/label/minimal_properties.json +++ b/tests/attributes/spec/valid/label/minimal_properties.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -26,4 +26,4 @@ }, "description": "Tests for the image-label JSON schema: " } -} \ 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 index 5530bba3..61dcffc4 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.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/attributes/spec/valid/plate/minimal_acquisitions.json b/tests/attributes/spec/valid/plate/minimal_acquisitions.json index c5f7e881..8378d386 100644 --- a/tests/attributes/spec/valid/plate/minimal_acquisitions.json +++ b/tests/attributes/spec/valid/plate/minimal_acquisitions.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -32,4 +32,4 @@ }, "description": "Tests for the plate JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/plate/minimal_no_acquisitions.json b/tests/attributes/spec/valid/plate/minimal_no_acquisitions.json index c47a9508..eada2ab7 100644 --- a/tests/attributes/spec/valid/plate/minimal_no_acquisitions.json +++ b/tests/attributes/spec/valid/plate/minimal_no_acquisitions.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ }, "description": "Tests for the plate JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/plate/non_alphanumeric_row.json b/tests/attributes/spec/valid/plate/non_alphanumeric_row.json index 85185029..72120f1c 100644 --- a/tests/attributes/spec/valid/plate/non_alphanumeric_row.json +++ b/tests/attributes/spec/valid/plate/non_alphanumeric_row.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ }, "description": "Tests for the plate JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/scene/scene.json b/tests/attributes/spec/valid/scene/scene.json index 9e5a0802..53e3c0d0 100644 --- a/tests/attributes/spec/valid/scene/scene.json +++ b/tests/attributes/spec/valid/scene/scene.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene": { "coordinateTransformations": [ { @@ -68,4 +68,4 @@ ] } } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/scene/tile_stitching.json b/tests/attributes/spec/valid/scene/tile_stitching.json index 98b51634..4d609544 100644 --- a/tests/attributes/spec/valid/scene/tile_stitching.json +++ b/tests/attributes/spec/valid/scene/tile_stitching.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "scene":{ "coordinateTransformations": [ { @@ -71,4 +71,4 @@ }, "description": "Tests for the scene JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/transforms/affine.json b/tests/attributes/spec/valid/transforms/affine.json index 6aa86af6..0ce8bfa2 100644 --- a/tests/attributes/spec/valid/transforms/affine.json +++ b/tests/attributes/spec/valid/transforms/affine.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/affineParams.json b/tests/attributes/spec/valid/transforms/affineParams.json index 5afad7b2..ae48119c 100644 --- a/tests/attributes/spec/valid/transforms/affineParams.json +++ b/tests/attributes/spec/valid/transforms/affineParams.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/byDimension.json b/tests/attributes/spec/valid/transforms/byDimension.json index f953e9ca..83060bd0 100644 --- a/tests/attributes/spec/valid/transforms/byDimension.json +++ b/tests/attributes/spec/valid/transforms/byDimension.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -72,7 +72,7 @@ }, "outputAxes": [1], "inputAxes": [1] - + } ], "name": "transform-name" diff --git a/tests/attributes/spec/valid/transforms/identity.json b/tests/attributes/spec/valid/transforms/identity.json index e0e933e6..6d69a874 100644 --- a/tests/attributes/spec/valid/transforms/identity.json +++ b/tests/attributes/spec/valid/transforms/identity.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/mapAxis.json b/tests/attributes/spec/valid/transforms/mapAxis.json index c06264bb..4d309f0c 100644 --- a/tests/attributes/spec/valid/transforms/mapAxis.json +++ b/tests/attributes/spec/valid/transforms/mapAxis.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/projectAxis.json b/tests/attributes/spec/valid/transforms/projectAxis.json index b1aea791..aa4d5402 100644 --- a/tests/attributes/spec/valid/transforms/projectAxis.json +++ b/tests/attributes/spec/valid/transforms/projectAxis.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/projectAxis2.json b/tests/attributes/spec/valid/transforms/projectAxis2.json index a6468560..0183ce24 100644 --- a/tests/attributes/spec/valid/transforms/projectAxis2.json +++ b/tests/attributes/spec/valid/transforms/projectAxis2.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/rotation.json b/tests/attributes/spec/valid/transforms/rotation.json index 839f5a4f..ebc78089 100644 --- a/tests/attributes/spec/valid/transforms/rotation.json +++ b/tests/attributes/spec/valid/transforms/rotation.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/transforms/scale.json b/tests/attributes/spec/valid/transforms/scale.json index 442ea458..1f3aeb55 100644 --- a/tests/attributes/spec/valid/transforms/scale.json +++ b/tests/attributes/spec/valid/transforms/scale.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/attributes/spec/valid/well/minimal_acquisitions.json b/tests/attributes/spec/valid/well/minimal_acquisitions.json index fdf16aa6..951a3956 100644 --- a/tests/attributes/spec/valid/well/minimal_acquisitions.json +++ b/tests/attributes/spec/valid/well/minimal_acquisitions.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -16,4 +16,4 @@ }, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/well/minimal_no_acquisition.json b/tests/attributes/spec/valid/well/minimal_no_acquisition.json index 5e55ac2e..78daf3ed 100644 --- a/tests/attributes/spec/valid/well/minimal_no_acquisition.json +++ b/tests/attributes/spec/valid/well/minimal_no_acquisition.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -15,4 +15,4 @@ }, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/valid/well/minimal_path_special_char.json b/tests/attributes/spec/valid/well/minimal_path_special_char.json index f40378c3..23c3d3c4 100644 --- a/tests/attributes/spec/valid/well/minimal_path_special_char.json +++ b/tests/attributes/spec/valid/well/minimal_path_special_char.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -15,4 +15,4 @@ }, "description": "Tests for the well JSON schema: " } -} \ No newline at end of file +} diff --git a/tests/test_validation.py b/tests/test_validation.py index 064b6485..a845fde2 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -19,7 +19,7 @@ schema_store[schema["$id"]] = schema GENERIC_SCHEMA = schema_store[ - "https://ngff.openmicroscopy.org/0.9.dev1/schemas/ome_zarr.schema" + "https://ngff.openmicroscopy.org/0.9.dev2/schemas/ome_zarr.schema" ] diff --git a/tests/zarr/spec/invalid/image/duplicate_axes.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/duplicate_axes.ome.zarr/zarr.json index 9e0bc8fa..391cf827 100644 --- a/tests/zarr/spec/invalid/image/duplicate_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/duplicate_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json index 371908c9..72f92916 100644 --- a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/zarr/spec/invalid/image/duplicate_scale.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/duplicate_scale.ome.zarr/zarr.json index 5e60745c..2c3af186 100644 --- a/tests/zarr/spec/invalid/image/duplicate_scale.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/duplicate_scale.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -58,4 +58,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/empty_transformations.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/empty_transformations.ome.zarr/zarr.json index 1b1febdd..43d76073 100644 --- a/tests/zarr/spec/invalid/image/empty_transformations.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/empty_transformations.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -39,4 +39,4 @@ "valid": false } } -} \ No newline at end of file +} 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 ca824fc2..476ec6d3 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 @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -64,4 +64,4 @@ "valid": false } } -} \ No newline at end of file +} 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 8b05f65b..70263e31 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 @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -64,4 +64,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/invalid_multiscales_transformations.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/invalid_multiscales_transformations.ome.zarr/zarr.json index 79ba48e9..ff0887c3 100644 --- a/tests/zarr/spec/invalid/image/invalid_multiscales_transformations.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/invalid_multiscales_transformations.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -57,4 +57,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/invalid_path.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/invalid_path.ome.zarr/zarr.json index 8c40d284..6d35bb8a 100644 --- a/tests/zarr/spec/invalid/image/invalid_path.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/invalid_path.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/invalid_transformation_type.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/invalid_transformation_type.ome.zarr/zarr.json index 27c17e24..19935242 100644 --- a/tests/zarr/spec/invalid/image/invalid_transformation_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/invalid_transformation_type.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr b/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr index d1552926..086a5885 100644 --- a/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr +++ b/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -57,4 +57,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_axes.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_axes.ome.zarr/zarr.json index 9d02cc06..3a30b198 100644 --- a/tests/zarr/spec/invalid/image/missing_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "datasets": [ @@ -32,4 +32,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_axes_name.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_axes_name.ome.zarr/zarr.json index 54cdb63e..d577796d 100644 --- a/tests/zarr/spec/invalid/image/missing_axes_name.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_axes_name.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -47,4 +47,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_datasets.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_datasets.ome.zarr/zarr.json index e4dd5782..e2510888 100644 --- a/tests/zarr/spec/invalid/image/missing_datasets.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_datasets.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -33,4 +33,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_path.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_path.ome.zarr/zarr.json index 4384e82f..25d0ce67 100644 --- a/tests/zarr/spec/invalid/image/missing_path.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_path.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -48,4 +48,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_scale.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_scale.ome.zarr/zarr.json index 10d155c6..f6074380 100644 --- a/tests/zarr/spec/invalid/image/missing_scale.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_scale.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -49,4 +49,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/missing_transformations.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/missing_transformations.ome.zarr/zarr.json index f458fdd3..023a5eac 100644 --- a/tests/zarr/spec/invalid/image/missing_transformations.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/missing_transformations.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/no_axes.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/no_axes.ome.zarr/zarr.json index d357842f..0deeea96 100644 --- a/tests/zarr/spec/invalid/image/no_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/no_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "axes": [], @@ -33,4 +33,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/no_datasets.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/no_datasets.ome.zarr/zarr.json index 56872a98..38057277 100644 --- a/tests/zarr/spec/invalid/image/no_datasets.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/no_datasets.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -34,4 +34,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/no_multiscales.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/no_multiscales.ome.zarr/zarr.json index 4aad0123..d0cafabc 100644 --- a/tests/zarr/spec/invalid/image/no_multiscales.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/no_multiscales.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [] }, "_conformance": { @@ -13,4 +13,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json index 273887b1..95b07777 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json index dcdfd3ca..90b4fea9 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json index a5c31f1b..767e9db6 100644 --- a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", diff --git a/tests/zarr/spec/invalid/label/colors_duplicate.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_duplicate.ome.zarr/zarr.json index 4f6a1b3b..d433e6d5 100644 --- a/tests/zarr/spec/invalid/label/colors_duplicate.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_duplicate.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -35,4 +35,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/colors_no_label_value.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_no_label_value.ome.zarr/zarr.json index 2f31424d..8e6f6d7c 100644 --- a/tests/zarr/spec/invalid/label/colors_no_label_value.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_no_label_value.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -25,4 +25,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json index d90b7f35..189f19b5 100644 --- a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -25,4 +25,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/colors_rgba_type.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_rgba_type.ome.zarr/zarr.json index 429a93d2..fe0cbb9b 100644 --- a/tests/zarr/spec/invalid/label/colors_rgba_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_rgba_type.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -26,4 +26,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/empty_colors.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/empty_colors.ome.zarr/zarr.json index 87ec8063..ca29c585 100644 --- a/tests/zarr/spec/invalid/label/empty_colors.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/empty_colors.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [] } @@ -16,4 +16,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/empty_properties.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/empty_properties.ome.zarr/zarr.json index a1fc2fea..585fe21b 100644 --- a/tests/zarr/spec/invalid/label/empty_properties.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/empty_properties.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "properties": [] } @@ -16,4 +16,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/properties_no_label_value.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/properties_no_label_value.ome.zarr/zarr.json index 4b94c550..a9bdac02 100644 --- a/tests/zarr/spec/invalid/label/properties_no_label_value.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/properties_no_label_value.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "properties": [ { @@ -20,4 +20,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/acquisition_negative_starttime.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/acquisition_negative_starttime.ome.zarr/zarr.json index d3a75a88..08de944c 100644 --- a/tests/zarr/spec/invalid/plate/acquisition_negative_starttime.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/acquisition_negative_starttime.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/acquisition_noninteger_endtime.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/acquisition_noninteger_endtime.ome.zarr/zarr.json index 88786356..0feca8cc 100644 --- a/tests/zarr/spec/invalid/plate/acquisition_noninteger_endtime.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/acquisition_noninteger_endtime.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/acquisition_noninteger_starttime.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/acquisition_noninteger_starttime.ome.zarr/zarr.json index 62a18ed1..2348a893 100644 --- a/tests/zarr/spec/invalid/plate/acquisition_noninteger_starttime.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/acquisition_noninteger_starttime.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/acquisition_zero_maximumfieldcount.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/acquisition_zero_maximumfieldcount.ome.zarr/zarr.json index 82d16481..a9c08ed1 100644 --- a/tests/zarr/spec/invalid/plate/acquisition_zero_maximumfieldcount.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/acquisition_zero_maximumfieldcount.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/duplicate_columns.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/duplicate_columns.ome.zarr/zarr.json index 22f45aac..e1a4ad67 100644 --- a/tests/zarr/spec/invalid/plate/duplicate_columns.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/duplicate_columns.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -35,4 +35,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/duplicate_rows-2.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/duplicate_rows-2.ome.zarr/zarr.json index 6040e467..46638f63 100644 --- a/tests/zarr/spec/invalid/plate/duplicate_rows-2.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/duplicate_rows-2.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -40,4 +40,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/duplicate_rows.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/duplicate_rows.ome.zarr/zarr.json index 9e45b6a6..535a6f88 100644 --- a/tests/zarr/spec/invalid/plate/duplicate_rows.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/duplicate_rows.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -35,4 +35,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/empty_columns.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/empty_columns.ome.zarr/zarr.json index 711d4074..615f3529 100644 --- a/tests/zarr/spec/invalid/plate/empty_columns.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/empty_columns.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [], "rows": [ @@ -28,4 +28,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/empty_rows.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/empty_rows.ome.zarr/zarr.json index e7c1765c..95445b3a 100644 --- a/tests/zarr/spec/invalid/plate/empty_rows.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/empty_rows.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -28,4 +28,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/empty_wells.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/empty_wells.ome.zarr/zarr.json index 1d01ecc4..62c2c081 100644 --- a/tests/zarr/spec/invalid/plate/empty_wells.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/empty_wells.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -26,4 +26,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_acquisition_id.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_acquisition_id.ome.zarr/zarr.json index 0e8c0713..ebe2a1e3 100644 --- a/tests/zarr/spec/invalid/plate/missing_acquisition_id.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_acquisition_id.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -37,4 +37,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_column_name.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_column_name.ome.zarr/zarr.json index 086c951c..a8bb5c05 100644 --- a/tests/zarr/spec/invalid/plate/missing_column_name.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_column_name.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -32,4 +32,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_columns.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_columns.ome.zarr/zarr.json index c9635c2e..2b4f7245 100644 --- a/tests/zarr/spec/invalid/plate/missing_columns.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_columns.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "rows": [ { @@ -27,4 +27,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_row_name.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_row_name.ome.zarr/zarr.json index 2db0d347..db5c51ff 100644 --- a/tests/zarr/spec/invalid/plate/missing_row_name.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_row_name.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -32,4 +32,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_rows.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_rows.ome.zarr/zarr.json index 586b78bf..fbcdb07c 100644 --- a/tests/zarr/spec/invalid/plate/missing_rows.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_rows.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -27,4 +27,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_well_columnIndex.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_well_columnIndex.ome.zarr/zarr.json index def1467f..60e81e4f 100644 --- a/tests/zarr/spec/invalid/plate/missing_well_columnIndex.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_well_columnIndex.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_well_path.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_well_path.ome.zarr/zarr.json index 8f2c35e9..ec4c9992 100644 --- a/tests/zarr/spec/invalid/plate/missing_well_path.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_well_path.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_well_rowIndex.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_well_rowIndex.ome.zarr/zarr.json index dc173001..ce3096f6 100644 --- a/tests/zarr/spec/invalid/plate/missing_well_rowIndex.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_well_rowIndex.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/missing_wells.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/missing_wells.ome.zarr/zarr.json index acfdbaab..30de098f 100644 --- a/tests/zarr/spec/invalid/plate/missing_wells.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/missing_wells.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -25,4 +25,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/negative_acquisition_id.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/negative_acquisition_id.ome.zarr/zarr.json index a480a6c4..c74534ac 100644 --- a/tests/zarr/spec/invalid/plate/negative_acquisition_id.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/negative_acquisition_id.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -37,4 +37,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/negative_endtime.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/negative_endtime.ome.zarr/zarr.json index 607b06b7..d0278263 100644 --- a/tests/zarr/spec/invalid/plate/negative_endtime.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/negative_endtime.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/non_alphanumeric_column.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/non_alphanumeric_column.ome.zarr/zarr.json index f36d1614..0310ffa1 100644 --- a/tests/zarr/spec/invalid/plate/non_alphanumeric_column.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/non_alphanumeric_column.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -32,4 +32,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/non_integer_acquisition_id.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/non_integer_acquisition_id.ome.zarr/zarr.json index 5263541f..03f148da 100644 --- a/tests/zarr/spec/invalid/plate/non_integer_acquisition_id.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/non_integer_acquisition_id.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -37,4 +37,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.ome.zarr/zarr.json index 69327c93..6aa04144 100644 --- a/tests/zarr/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/non_integer_acquisition_maximumfieldcount.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -38,4 +38,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/well_1group.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/well_1group.ome.zarr/zarr.json index dfd857da..10a12cb8 100644 --- a/tests/zarr/spec/invalid/plate/well_1group.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/well_1group.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/well_3groups.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/well_3groups.ome.zarr/zarr.json index ca6057e9..4fb856ba 100644 --- a/tests/zarr/spec/invalid/plate/well_3groups.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/well_3groups.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json index bf23545e..f5d3750e 100644 --- a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -33,4 +33,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/custom_axis_type.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/custom_axis_type.ome.zarr/zarr.json index db34cd97..8ece1958 100644 --- a/tests/zarr/spec/valid/image/custom_axis_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/custom_axis_type.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/zarr/spec/valid/image/custom_type_axes.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/custom_type_axes.ome.zarr/zarr.json index 285392d9..5ad0859d 100644 --- a/tests/zarr/spec/valid/image/custom_type_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/custom_type_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -53,4 +53,4 @@ } } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/invalid_axis_units.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/invalid_axis_units.ome.zarr/zarr.json index 3fd9dc9a..fb0a31ec 100644 --- a/tests/zarr/spec/valid/image/invalid_axis_units.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/invalid_axis_units.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -48,4 +48,4 @@ } } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/many_axes.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/many_axes.ome.zarr/zarr.json index 1826a33b..c2361885 100644 --- a/tests/zarr/spec/valid/image/many_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/many_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -67,4 +67,4 @@ "valid": true } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/mismatch_axes_units.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/mismatch_axes_units.ome.zarr/zarr.json index 3f41fe32..2f983b20 100644 --- a/tests/zarr/spec/valid/image/mismatch_axes_units.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/mismatch_axes_units.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -53,4 +53,4 @@ } } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/missing_name.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/missing_name.ome.zarr/zarr.json index db606ee6..e6459fdb 100644 --- a/tests/zarr/spec/valid/image/missing_name.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/missing_name.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "datasets": [ @@ -60,4 +60,4 @@ } } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/missing_space_axes.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/missing_space_axes.ome.zarr/zarr.json index 037435a5..410f29c1 100644 --- a/tests/zarr/spec/valid/image/missing_space_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/missing_space_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -47,4 +47,4 @@ "valid": true } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/one_space_axes.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/one_space_axes.ome.zarr/zarr.json index 83abe77b..ed2417e5 100644 --- a/tests/zarr/spec/valid/image/one_space_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/one_space_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -52,4 +52,4 @@ "valid": true } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/orientation.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/orientation.ome.zarr/zarr.json index bc9f09dd..3b57d432 100644 --- a/tests/zarr/spec/valid/image/orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/orientation.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ diff --git a/tests/zarr/spec/valid/image/single_axis.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/single_axis.ome.zarr/zarr.json index 6ae1fb8c..9d29f8a5 100644 --- a/tests/zarr/spec/valid/image/single_axis.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/single_axis.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -44,4 +44,4 @@ "valid": true } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/image/untyped_axes.ome.zarr/zarr.json b/tests/zarr/spec/valid/image/untyped_axes.ome.zarr/zarr.json index d960bd63..e6aff9c0 100644 --- a/tests/zarr/spec/valid/image/untyped_axes.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/image/untyped_axes.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -52,4 +52,4 @@ } } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/label/minimal.ome.zarr/zarr.json b/tests/zarr/spec/valid/label/minimal.ome.zarr/zarr.json index 5cbce7ee..cf9d0ebf 100644 --- a/tests/zarr/spec/valid/label/minimal.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/label/minimal.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -25,4 +25,4 @@ "description": "Tests for the image-label JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/label/minimal_properties.ome.zarr/zarr.json b/tests/zarr/spec/valid/label/minimal_properties.ome.zarr/zarr.json index 5de52551..da91c3ff 100644 --- a/tests/zarr/spec/valid/label/minimal_properties.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/label/minimal_properties.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "image-label": { "colors": [ { @@ -30,4 +30,4 @@ "description": "Tests for the image-label JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/plate/minimal_acquisitions.ome.zarr/zarr.json b/tests/zarr/spec/valid/plate/minimal_acquisitions.ome.zarr/zarr.json index 1428fdd4..bfd76b0a 100644 --- a/tests/zarr/spec/valid/plate/minimal_acquisitions.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/plate/minimal_acquisitions.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "acquisitions": [ { @@ -36,4 +36,4 @@ "description": "Tests for the plate JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/plate/minimal_no_acquisitions.ome.zarr/zarr.json b/tests/zarr/spec/valid/plate/minimal_no_acquisitions.ome.zarr/zarr.json index 68ede258..a2ae2b16 100644 --- a/tests/zarr/spec/valid/plate/minimal_no_acquisitions.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/plate/minimal_no_acquisitions.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "description": "Tests for the plate JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/plate/non_alphanumeric_row.ome.zarr/zarr.json b/tests/zarr/spec/valid/plate/non_alphanumeric_row.ome.zarr/zarr.json index 294ee081..bd3422ea 100644 --- a/tests/zarr/spec/valid/plate/non_alphanumeric_row.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/plate/non_alphanumeric_row.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "plate": { "columns": [ { @@ -31,4 +31,4 @@ "description": "Tests for the plate JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/well/minimal_acquisitions.ome.zarr/zarr.json b/tests/zarr/spec/valid/well/minimal_acquisitions.ome.zarr/zarr.json index 4801bc04..e8f8b84b 100644 --- a/tests/zarr/spec/valid/well/minimal_acquisitions.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/well/minimal_acquisitions.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -20,4 +20,4 @@ "description": "Tests for the well JSON schema: " } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/valid/well/minimal_no_acquisition.ome.zarr/zarr.json b/tests/zarr/spec/valid/well/minimal_no_acquisition.ome.zarr/zarr.json index 85f6b376..8a4d37f0 100644 --- a/tests/zarr/spec/valid/well/minimal_no_acquisition.ome.zarr/zarr.json +++ b/tests/zarr/spec/valid/well/minimal_no_acquisition.ome.zarr/zarr.json @@ -3,7 +3,7 @@ "node_type": "group", "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "well": { "images": [ { @@ -19,4 +19,4 @@ "description": "Tests for the well JSON schema: " } } -} \ No newline at end of file +} From ff76dd9d0bcc7badbaef8816e1476eccd65510cd Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 12:14:50 +0100 Subject: [PATCH 17/79] Update editorconfig - allow variation in markdown indentation - add config for .toml, .schema --- .editorconfig | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index 8aeedfed..d0b26cbd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,10 +6,13 @@ insert_final_newline = true charset = utf-8 trim_trailing_whitespace = true -[*.{py,md,ini}] +[*.md] +indent_style = space + +[*.{py,ini}] indent_style = space indent_size = 4 -[*.{json,yaml,yml,cff}] +[*.{json,yaml,yml,cff,toml,schema}] indent_style = space indent_size = 2 From 5726f701434f1f59bc2f33f819d4da6a8cc47007 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 12:16:46 +0100 Subject: [PATCH 18/79] Fix broken cross-reference Supercedes https://github.com/ome/ngff-spec/pull/197 Co-authored-by: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index b605ad7b..9faf103e 100644 --- a/index.md +++ b/index.md @@ -233,7 +233,7 @@ refer to different physical entities and therefore should not be analyzed jointl Tasks that require images, annotations, regions of interest, etc., SHOULD ensure that they are in the same coordinate system (same name and location within the Zarr hierarchy, with identical axes) or can be transformed to the same coordinate system before doing analysis. -See the [example below](spec:example:coordinate_transformation). +See the [example below](#spec:example:coordinate_transformation_scale). #### "axes" metadata (axes-md)= @@ -1615,7 +1615,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/multiscale_reference_to_label.json +```{literalinclude} examples/multiscales/multiscales_reference_to_label.json :language: json ``` From ea44b60e718ad1a9e0d39e628cd10a2223bce675 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 12:19:55 +0100 Subject: [PATCH 19/79] Fix anchors and references As implemented in https://github.com/ome/ngff-spec/pull/198 Co-authored-by: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 9faf103e..e19b82fc 100644 --- a/index.md +++ b/index.md @@ -262,14 +262,14 @@ where each object describes a dimension (axis) and: - MAY contain an "orientation" field, itself containing a "type" and a "value". Currently, "type" may only be "anatomical", and "value" may only be one from the list given in [list of possible anatomical - orientation values](orientation-values). A specific orientation value or + orientation values](spec:orientation-values). A specific orientation value or its inverse MUST NOT appear more than once in a given coordinate system. The values in the `name` fields MUST be unique within the same coordinate system. The length of "axes" MUST be equal to the number of dimensions of the arrays that contain the image data. ```{note} -:label: orientation-values +(spec:orientation-values)= When a spatial axis is aligned with a specific orientation, this can be indicated with the "orientation" field, which must have "type" From d561e11e5c3334764bc4cece48618c6584369086 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 12:54:15 +0100 Subject: [PATCH 20/79] Update dependencies Use dependency-groups rather than extras --- pyproject.toml | 8 +++++++- uv.lock | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d2447a4a..fe203a27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,13 @@ testing = [ ] [dependency-groups] -dev = ["rust-just"] +test = ["pytest"] +lint = ["codespell", "prek"] +dev = [ + "rust-just", + { include-group = "test" }, + { include-group = "lint" } +] [tool.codespell] ignore-regex = '\bComparin\b' diff --git a/uv.lock b/uv.lock index c4ae904e..25179f9c 100644 --- a/uv.lock +++ b/uv.lock @@ -1102,8 +1102,18 @@ testing = [ [package.dev-dependencies] dev = [ + { name = "codespell" }, + { name = "prek" }, + { name = "pytest" }, { name = "rust-just" }, ] +lint = [ + { name = "codespell" }, + { name = "prek" }, +] +test = [ + { name = "pytest" }, +] [package.metadata] requires-dist = [ @@ -1119,7 +1129,17 @@ requires-dist = [ provides-extras = ["testing"] [package.metadata.requires-dev] -dev = [{ name = "rust-just" }] +dev = [ + { name = "codespell" }, + { name = "prek" }, + { name = "pytest" }, + { name = "rust-just" }, +] +lint = [ + { name = "codespell" }, + { name = "prek" }, +] +test = [{ name = "pytest" }] [[package]] name = "nodeenv" @@ -1196,6 +1216,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "prek" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5e/76262cecced2c8d8d20474f8fc7cf4b7059d01a0b1ae2ffb9e375815c5a4/prek-0.5.1.tar.gz", hash = "sha256:581af5dc6462cfc60b58cadcf8e6bf5b9819d75493074f435dfa14d660a33218", size = 549170, upload-time = "2026-09-01T04:19:59.228Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/13/ab44b9a4aba8b8f1f4204bc754648cb89959ae4b0a81114c850ed8888bb6/prek-0.5.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:821fe17617fe0b26385ce6ce324a4201810ff50349b8bb75176da72f0b858cc6", size = 5981894, upload-time = "2026-09-01T04:19:46.92Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b4/3b2f9bc42bdbf17b182508a32f1f382d84502b7be1091b4c8ef21d043124/prek-0.5.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:afa9f5567c559e3045688bace59fa6c8336a6950f0bba063b57e57c476fb63d1", size = 5526575, upload-time = "2026-09-01T04:19:48.695Z" }, + { url = "https://files.pythonhosted.org/packages/df/26/a9e43ddc34fa3fe3199c7d5fc09d4d77045ac330d504c62a8b87983f0ebf/prek-0.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:25d2c63fadcc0b2eae434cea4ddc4164792add0abfb20e1bf6bbefd33610f2a9", size = 5824937, upload-time = "2026-09-01T04:19:50.184Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e6/c67e1d0661a97aa88ce8a3dca4b67ca5d26a1dc759c9df37430cb8f4aea9/prek-0.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231cc325d31e9d92db51da08b4d9a2e061f084d459307b5920ccea95e86b5c9f", size = 6202110, upload-time = "2026-09-01T04:19:51.747Z" }, + { url = "https://files.pythonhosted.org/packages/55/1c/8d46f27b6be800ecda86f15b3d476d80f290d6d4a39a6cf992b170148ce6/prek-0.5.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:39d92d26a1d210d3fad63e316d9379ad4fbedb4545af42c82cb73ebc20ffc64d", size = 5829515, upload-time = "2026-09-01T04:19:53.473Z" }, + { url = "https://files.pythonhosted.org/packages/f1/de/0d5c1c20e26bfc866885aed4ca68222c1fb8d7ddd8639a789ba0be8ba57e/prek-0.5.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:c6481f5effbb1a83a578bf769a527e1192d0faf4f2e481733917e1fff2007253", size = 6317963, upload-time = "2026-09-01T04:19:55.051Z" }, + { url = "https://files.pythonhosted.org/packages/cb/21/56b31d445ac84607919679841b47288d42687925cdf9a31207db277d753d/prek-0.5.1-py3-none-win_amd64.whl", hash = "sha256:74609c3cd3f1c14d35d081905f58b266133b9532df53a75648a280e6a80febb3", size = 5726528, upload-time = "2026-09-01T04:19:56.482Z" }, + { url = "https://files.pythonhosted.org/packages/d4/95/ada15ee42ef72b7d422ae3e3fbc4753d4bc6634ba23de1b7cec84b407df7/prek-0.5.1-py3-none-win_arm64.whl", hash = "sha256:f408364fc7f10996f396a14542d8a3e35494a4fde2b1cb873d996715d1876322", size = 5490020, upload-time = "2026-09-01T04:19:57.841Z" }, +] + [[package]] name = "prometheus-client" version = "0.26.0" From fb94f8b63376d28e036f6154aae1abd95bd0b9b6 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:01:25 +0100 Subject: [PATCH 21/79] pre-commit and other justfile fixes --- justfile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/justfile b/justfile index 3ab83f74..c69e86c2 100644 --- a/justfile +++ b/justfile @@ -15,15 +15,23 @@ serve: _prebuild # Check spelling in the source files; # configured in pyproject.toml. spell: - uv run --extra testing codespell + uv run codespell # Rebuild the `CITATION.cff` file from `myst.yml`. cff: uv run jupyter book build --cff # Run all lint commands. -lint: spell +lint: spell pre-commit # Run schema tests. test: - uv run --extra testing pytest -v + uv run pytest -v + +# Install pre-commit hooks to lint changed files. +pre-commit-install: + uv run prek install + +# Run pre-commit lints on all files. +pre-commit: + uv run prek run --all-files From c23a44cb0ffd1520bd5f4dddea4e2eb6acee87a1 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:01:57 +0100 Subject: [PATCH 22/79] Add pre-commit configuration --- prek.toml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 prek.toml diff --git a/prek.toml b/prek.toml new file mode 100644 index 00000000..5bc51b41 --- /dev/null +++ b/prek.toml @@ -0,0 +1,25 @@ +[[repos]] +repo = "builtin" +hooks = [ + { id = "trailing-whitespace" }, + { id = "check-yaml" }, + { id = "end-of-file-fixer" }, + # examples JSON files are actually JSONC and so would fail this hook + { id = "check-json", exclude = { glob = "examples/**/*.json" } }, + # skip JSONC as above + { id = "pretty-format-json", exclude = { glob = "examples/**/*.json" }, args = [ + "--no-sort-keys", + "--autofix", + ] }, + { id = "mixed-line-ending", fix = "lf" }, +] + +[[repos]] +repo = "https://github.com/editorconfig-checker/editorconfig-checker.python" +rev = "3.11.1" +hooks = [{ id = "editorconfig-checker" }] + +[[repos]] +repo = "https://github.com/codespell-project/codespell" +rev = "v2.4.3" +hooks = [{ id = "codespell" }] From 962078565535fe9e5e2c5ddb3647bcc1bee5cf07 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:07:03 +0100 Subject: [PATCH 23/79] pre-commit configuration --- contribute.md | 10 ++++++++++ prek.toml | 6 +++--- version_history.md | 4 ++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/contribute.md b/contribute.md index 74b15811..46be1b59 100644 --- a/contribute.md +++ b/contribute.md @@ -47,6 +47,16 @@ To see all available recipes, use just ``` +## Code quality + +To maximise consistency and minimise non-meaningful git churn, +pre-commit hooks are used to lint and format some types of contribution. +This is enforced on CI. + +When you clone the repository, install the hooks with `just pre-commit-install`. +These will run whenever you make a commit; +you can run them manually with `just pre-commit`. + ## First contribution If you haven't contributed to the spec before, diff --git a/prek.toml b/prek.toml index 5bc51b41..ba027c85 100644 --- a/prek.toml +++ b/prek.toml @@ -2,16 +2,16 @@ repo = "builtin" hooks = [ { id = "trailing-whitespace" }, - { id = "check-yaml" }, { id = "end-of-file-fixer" }, - # examples JSON files are actually JSONC and so would fail this hook + { id = "mixed-line-ending", fix = "lf" }, + { id = "check-yaml" }, + # example .json files are actually JSONC and so would fail this hook { id = "check-json", exclude = { glob = "examples/**/*.json" } }, # skip JSONC as above { id = "pretty-format-json", exclude = { glob = "examples/**/*.json" }, args = [ "--no-sort-keys", "--autofix", ] }, - { id = "mixed-line-ending", fix = "lf" }, ] [[repos]] diff --git a/version_history.md b/version_history.md index a8355497..04a39742 100644 --- a/version_history.md +++ b/version_history.md @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased +### Added + +- Pre-commit hook configuration for code quality + ### Removed - [ome/ngff-spec#138](https://github.com/ome/ngff-spec/issues/138) Strict schemas and test cases From 272aa7a9c554b3b6e6dd4541a021384672b6d2b9 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:07:42 +0100 Subject: [PATCH 24/79] Add pre-commit configuration to CI --- .github/workflows/validation.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 186610e8..950422b9 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -10,4 +10,14 @@ jobs: steps: - uses: actions/checkout@v7 - uses: astral-sh/setup-uv@v9.0.0 - - run: uv run --extra testing pytest -v + - uses: extractions/setup-just@v4 + - run: just test + + pre-commit: + name: Pre-commit + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v9.0.0 + - uses: extractions/setup-just@v4 + - run: just pre-commit From f2f4ef8d72c72b372f5e787457f550bb446d7b17 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:08:32 +0100 Subject: [PATCH 25/79] Fix trailing whitespace --- .readthedocs.yaml | 4 ++-- authors.yml | 2 +- examples/transformations/affine2d2d.json | 2 +- examples/transformations/affine2d2d_with_channel.json | 2 +- examples/transformations/affine2d3d.json | 2 +- examples/transformations/bijection.json | 2 +- examples/transformations/identity.json | 2 +- examples/transformations/projectAxis.json | 8 ++++---- examples/transformations/projectAxis2.json | 8 ++++---- examples/transformations/scale.json | 2 +- examples/transformations/scale_with_discrete.json | 2 +- examples/transformations/sequence.json | 2 +- examples/transformations/translation.json | 2 +- examples/transformations/xarrayLike.json | 2 +- pre_build.py | 2 +- 15 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 26a6a936..d0661d22 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -8,13 +8,13 @@ build: post_install: - pip install uv - UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --link-mode=copy - + pre_build: # Run the script that autogenerates content before building the docs - "uv run python pre_build.py" build: - html: + html: - jupyter book build --html --ci - mkdir -p $READTHEDOCS_OUTPUT - mv ./_build/html $READTHEDOCS_OUTPUT diff --git a/authors.yml b/authors.yml index fbe09819..54db00e2 100644 --- a/authors.yml +++ b/authors.yml @@ -192,7 +192,7 @@ project: - name: Constantin Pape github: constantinpape orcid: 0000-0001-6562-7187 - + # R - name: Sebastian Rhode github: sebi06 diff --git a/examples/transformations/affine2d2d.json b/examples/transformations/affine2d2d.json index 94477dc9..79ec1ad1 100644 --- a/examples/transformations/affine2d2d.json +++ b/examples/transformations/affine2d2d.json @@ -9,7 +9,7 @@ "axes": [{"name": "y", "type": "space"}, {"name": "x", "type": "space"}] } ], - "coordinateTransformations" : [ + "coordinateTransformations" : [ { "type": "affine", "affine": [[1, 2, 3], [4, 5, 6]], diff --git a/examples/transformations/affine2d2d_with_channel.json b/examples/transformations/affine2d2d_with_channel.json index 2c7a73ee..d23e63f0 100644 --- a/examples/transformations/affine2d2d_with_channel.json +++ b/examples/transformations/affine2d2d_with_channel.json @@ -17,7 +17,7 @@ ] } ], - "coordinateTransformations" : [ + "coordinateTransformations" : [ { "type": "affine", "affine": [ diff --git a/examples/transformations/affine2d3d.json b/examples/transformations/affine2d3d.json index e0658303..0e081d6a 100644 --- a/examples/transformations/affine2d3d.json +++ b/examples/transformations/affine2d3d.json @@ -9,7 +9,7 @@ "axes": [{"name": "z", "type": "space"}, {"name": "y", "type": "space"}, {"name": "x", "type": "space"}] } ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "affine", "affine": [[1, 0, 0], [2, 3, 4], [5, 6, 7]], diff --git a/examples/transformations/bijection.json b/examples/transformations/bijection.json index 22c52067..6fd9184e 100644 --- a/examples/transformations/bijection.json +++ b/examples/transformations/bijection.json @@ -9,7 +9,7 @@ "axes": [{"name": "y", "type": "space"}, {"name": "x", "type": "space"}] } ], - "coordinateTransformations" : [ + "coordinateTransformations" : [ { "type": "bijection", "forward": { diff --git a/examples/transformations/identity.json b/examples/transformations/identity.json index 3f952b04..13969b00 100644 --- a/examples/transformations/identity.json +++ b/examples/transformations/identity.json @@ -9,7 +9,7 @@ "axes": [ {"name": "y", "type": "space"}, {"name": "x", "type": "space"} ] } ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "identity", "input": {"name": "in"}, "output": {"name": "out"} } ] } diff --git a/examples/transformations/projectAxis.json b/examples/transformations/projectAxis.json index 697fa339..d143422a 100644 --- a/examples/transformations/projectAxis.json +++ b/examples/transformations/projectAxis.json @@ -3,13 +3,13 @@ { "name": "in", "axes": [ {"name": "i"}, {"name": "j"} ]}, { "name": "out", "axes": [ {"name": "c"}, {"name": "z"}, {"name": "y"}, {"name": "x"} ]} ], - "coordinateTransformations": [ - { + "coordinateTransformations": [ + { "name": "up-project", - "type": "projectAxis", + "type": "projectAxis", "createdOutputs": [0, 1], "input": {"name": "in"}, - "output": {"name": "out"} + "output": {"name": "out"} } ] } diff --git a/examples/transformations/projectAxis2.json b/examples/transformations/projectAxis2.json index f0bae48c..6bda7d42 100644 --- a/examples/transformations/projectAxis2.json +++ b/examples/transformations/projectAxis2.json @@ -3,14 +3,14 @@ { "name": "in", "axes": [ {"name": "c"}, {"name": "i"}, {"name": "j"} ]}, { "name": "out", "axes": [ {"name": "z"}, {"name": "y"}, {"name": "x"} ]} ], - "coordinateTransformations": [ - { + "coordinateTransformations": [ + { "name": "up-project", - "type": "projectAxis", + "type": "projectAxis", "createdOutputs": [0], "droppedInputs": [0], "input": {"name": "in"}, - "output": {"name": "out"} + "output": {"name": "out"} } ] } diff --git a/examples/transformations/scale.json b/examples/transformations/scale.json index a9743007..a0d91679 100644 --- a/examples/transformations/scale.json +++ b/examples/transformations/scale.json @@ -9,7 +9,7 @@ "axes": [{"name": "y", "type": "space"}, {"name": "x", "type": "space"}] } ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "scale", "scale": [2, 3.12], diff --git a/examples/transformations/scale_with_discrete.json b/examples/transformations/scale_with_discrete.json index c5ee3433..98d628f7 100644 --- a/examples/transformations/scale_with_discrete.json +++ b/examples/transformations/scale_with_discrete.json @@ -17,7 +17,7 @@ ] } ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "scale", "scale": [1, 3.12, 2], diff --git a/examples/transformations/sequence.json b/examples/transformations/sequence.json index 4a29847d..48bb051a 100644 --- a/examples/transformations/sequence.json +++ b/examples/transformations/sequence.json @@ -9,7 +9,7 @@ "axes": [ {"name": "y", "type": "space"}, {"name": "x", "type": "space"} ] } ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "sequence", "input": {"name": "in"}, diff --git a/examples/transformations/translation.json b/examples/transformations/translation.json index aa2530d7..f3b4c883 100644 --- a/examples/transformations/translation.json +++ b/examples/transformations/translation.json @@ -9,7 +9,7 @@ "axes": [{"name": "y", "type": "space"}, {"name": "x", "type": "space"}] } ], - "coordinateTransformations" : [ + "coordinateTransformations" : [ { "type": "translation", "input": {"name": "in"}, diff --git a/examples/transformations/xarrayLike.json b/examples/transformations/xarrayLike.json index 7b0f8e7a..0a38c9bf 100644 --- a/examples/transformations/xarrayLike.json +++ b/examples/transformations/xarrayLike.json @@ -3,7 +3,7 @@ { "name": "in", "axes": [ {"name": "i", "type": "space"}, {"name": "j", "type": "space"} ]}, { "name": "out", "axes": [ {"name": "x", "type": "space"}, {"name": "y", "type": "space"} ]} ], - "coordinateTransformations": [ + "coordinateTransformations": [ { "type": "byDimension", "input": {"name": "in"}, diff --git a/pre_build.py b/pre_build.py index 86a4d0d9..090c9602 100644 --- a/pre_build.py +++ b/pre_build.py @@ -94,7 +94,7 @@ def build_json_schemas(): 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: From fa3393049f66da9823060dbaf1ee74254ebfed82 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:08:53 +0100 Subject: [PATCH 26/79] Fix end-of-file newline --- citing.md | 2 +- examples/label/.config.json | 2 +- examples/multiscales/.config.json | 2 +- examples/plate/.config.json | 2 +- examples/transformations/displacements/.config.json | 2 +- examples/well/.config.json | 2 +- schemas/_version.schema | 2 +- tests/attributes/spec/invalid/omero/missing_channels.json | 2 +- tests/attributes/spec/invalid/omero/missing_start_end.json | 2 +- tests/attributes/spec/invalid/scene/scene_missing_version.json | 2 +- tests/attributes/spec/invalid/well/duplicate_images.json | 2 +- tests/attributes/spec/invalid/well/empty_images.json | 2 +- .../spec/invalid/well/non_integer_acquisition_id.json | 2 +- .../spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json | 2 +- .../zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json | 2 +- .../zarr/spec/invalid/well/duplicate_images.ome.zarr/zarr.json | 2 +- tests/zarr/spec/invalid/well/empty_images.ome.zarr/zarr.json | 2 +- .../invalid/well/non_integer_acquisition_id.ome.zarr/zarr.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/citing.md b/citing.md index 978817fb..70ba1b99 100644 --- a/citing.md +++ b/citing.md @@ -12,4 +12,4 @@ The latest edition is publicly available {cite}`ngff_spec_latest`. ```{bibliography} :style: unsrt -``` \ No newline at end of file +``` diff --git a/examples/label/.config.json b/examples/label/.config.json index d98e19c0..b6d18fe6 100644 --- a/examples/label/.config.json +++ b/examples/label/.config.json @@ -1,3 +1,3 @@ { "schema": "schemas/label.schema" -} \ No newline at end of file +} diff --git a/examples/multiscales/.config.json b/examples/multiscales/.config.json index 029ae09c..1bb8dc87 100644 --- a/examples/multiscales/.config.json +++ b/examples/multiscales/.config.json @@ -1,3 +1,3 @@ { "schema": "schemas/image.schema" -} \ No newline at end of file +} diff --git a/examples/plate/.config.json b/examples/plate/.config.json index 939366ad..d5dfa54b 100644 --- a/examples/plate/.config.json +++ b/examples/plate/.config.json @@ -1,3 +1,3 @@ { "schema": "schemas/plate.schema" -} \ No newline at end of file +} diff --git a/examples/transformations/displacements/.config.json b/examples/transformations/displacements/.config.json index 029ae09c..1bb8dc87 100644 --- a/examples/transformations/displacements/.config.json +++ b/examples/transformations/displacements/.config.json @@ -1,3 +1,3 @@ { "schema": "schemas/image.schema" -} \ No newline at end of file +} diff --git a/examples/well/.config.json b/examples/well/.config.json index af9ba888..8bb9b29e 100644 --- a/examples/well/.config.json +++ b/examples/well/.config.json @@ -1,3 +1,3 @@ { "schema": "schemas/well.schema" -} \ No newline at end of file +} diff --git a/schemas/_version.schema b/schemas/_version.schema index 540681ec..db1602a9 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -8,4 +8,4 @@ "0.9", "0.9.dev2" ] -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/omero/missing_channels.json b/tests/attributes/spec/invalid/omero/missing_channels.json index 7c5b7b58..a96fb53b 100644 --- a/tests/attributes/spec/invalid/omero/missing_channels.json +++ b/tests/attributes/spec/invalid/omero/missing_channels.json @@ -53,4 +53,4 @@ }, "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 index 8778a74c..f80bf4b4 100644 --- a/tests/attributes/spec/invalid/omero/missing_start_end.json +++ b/tests/attributes/spec/invalid/omero/missing_start_end.json @@ -85,4 +85,4 @@ }, "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/scene/scene_missing_version.json b/tests/attributes/spec/invalid/scene/scene_missing_version.json index 463b94d6..6b0eaa20 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_version.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_version.json @@ -27,4 +27,4 @@ "description": "Tests for the scene JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/duplicate_images.json b/tests/attributes/spec/invalid/well/duplicate_images.json index d4a6e751..1afd98ec 100644 --- a/tests/attributes/spec/invalid/well/duplicate_images.json +++ b/tests/attributes/spec/invalid/well/duplicate_images.json @@ -16,4 +16,4 @@ "description": "Tests for the well JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/empty_images.json b/tests/attributes/spec/invalid/well/empty_images.json index b4eb93e4..60707b72 100644 --- a/tests/attributes/spec/invalid/well/empty_images.json +++ b/tests/attributes/spec/invalid/well/empty_images.json @@ -9,4 +9,4 @@ "description": "Tests for the well JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/attributes/spec/invalid/well/non_integer_acquisition_id.json b/tests/attributes/spec/invalid/well/non_integer_acquisition_id.json index 8193e214..1bea37e3 100644 --- a/tests/attributes/spec/invalid/well/non_integer_acquisition_id.json +++ b/tests/attributes/spec/invalid/well/non_integer_acquisition_id.json @@ -14,4 +14,4 @@ "description": "Tests for the well JSON schema: ", "valid": false } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json index 4094ec3c..189f19b5 100644 --- a/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/label/colors_rgba_length.ome.zarr/zarr.json @@ -25,4 +25,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json index e853e85c..f5d3750e 100644 --- a/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/plate/zero_field_count.ome.zarr/zarr.json @@ -33,4 +33,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/well/duplicate_images.ome.zarr/zarr.json b/tests/zarr/spec/invalid/well/duplicate_images.ome.zarr/zarr.json index 1d643118..18b51c71 100644 --- a/tests/zarr/spec/invalid/well/duplicate_images.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/well/duplicate_images.ome.zarr/zarr.json @@ -20,4 +20,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/well/empty_images.ome.zarr/zarr.json b/tests/zarr/spec/invalid/well/empty_images.ome.zarr/zarr.json index 8b5bacb9..529dbe83 100644 --- a/tests/zarr/spec/invalid/well/empty_images.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/well/empty_images.ome.zarr/zarr.json @@ -13,4 +13,4 @@ "valid": false } } -} \ No newline at end of file +} diff --git a/tests/zarr/spec/invalid/well/non_integer_acquisition_id.ome.zarr/zarr.json b/tests/zarr/spec/invalid/well/non_integer_acquisition_id.ome.zarr/zarr.json index 45fcf75d..ac2403e0 100644 --- a/tests/zarr/spec/invalid/well/non_integer_acquisition_id.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/well/non_integer_acquisition_id.ome.zarr/zarr.json @@ -18,4 +18,4 @@ "valid": false } } -} \ No newline at end of file +} From 1c0e6250ea71fdb9571696b6118350c034483dfe Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:10:01 +0100 Subject: [PATCH 27/79] Format JSON --- .../spec/invalid/image/duplicate_axes.json | 8 +- .../invalid/image/duplicate_orientation.json | 92 ++--- .../spec/invalid/image/duplicate_scale.json | 16 +- .../invalid/image/invalid_channels_color.json | 8 +- .../image/invalid_channels_window.json | 8 +- .../invalid_multiscale_transform_input.json | 8 +- .../invalid_multiscale_transform_output.json | 8 +- .../invalid_multiscales_transformations.json | 8 +- .../spec/invalid/image/invalid_path.json | 8 +- .../image/invalid_transformation_type.json | 8 +- .../spec/invalid/image/missing_axes_name.json | 8 +- .../image/missing_coordinate_system_axes.json | 8 +- .../image/missing_coordinate_system_name.json | 8 +- .../image/missing_coordinate_systems.json | 8 +- .../spec/invalid/image/missing_path.json | 8 +- .../spec/invalid/image/missing_scale.json | 8 +- .../spec/invalid/image/no_axes.json | 8 +- .../image/non_existent_orientation.json | 92 ++--- .../image/non_existent_orientation_type.json | 92 ++--- .../invalid/image/non_space_orientation.json | 90 ++--- .../spec/invalid/omero/missing_channels.json | 3 +- ...cene_bijection_forward_missing_params.json | 96 ++--- ...cene_bijection_inverse_missing_params.json | 97 +++-- .../scene/scene_input_output_not_object.json | 146 +++---- .../invalid/scene/scene_missing_scene.json | 54 +-- .../scene/scene_missing_transformations.json | 54 +-- .../invalid/scene/scene_missing_version.json | 52 +-- .../transforms/bad_affine_no_affine.json | 102 ++--- .../bad_affine_no_input_output.json | 114 +++--- .../bad_byDimension_no_input_output_axes.json | 166 ++++---- .../bad_byDimension_wrong axes_type.json | 178 +++++---- .../spec/invalid/transforms/bad_mapaxis.json | 147 ++++---- .../spec/invalid/transforms/bad_mapaxis2.json | 145 +++---- .../spec/invalid/transforms/bad_mapaxis3.json | 145 +++---- .../spec/invalid/transforms/bad_mapaxis4.json | 143 +++---- .../spec/invalid/transforms/bad_mapaxis5.json | 138 +++---- .../bad_projectAxis_insert_non_unique.json | 77 +++- .../bad_projectAxis_insert_too_high_dim.json | 76 +++- .../bad_projectAxis_insert_too_many.json | 79 +++- .../bad_projectAxis_missing_op.json | 72 +++- .../bad_projectAxis_remove_non_unique.json | 77 +++- .../bad_projectAxis_remove_too_high_dim.json | 76 +++- .../bad_projectAxis_remove_too_many.json | 79 +++- .../spec/invalid/transforms/bad_rotation.json | 141 +++---- .../invalid/transforms/bad_rotation2.json | 136 +++---- .../invalid/transforms/bad_rotation3.json | 152 ++++---- .../bad_scale_path_not_allowed.json | 138 +++---- .../bad_translate_path_not_allowed.json | 138 +++---- .../multiscales_transform_forbidden.json | 148 ++++---- .../multiscales_transform_forbidden2.json | 148 ++++---- .../multiscales_transform_forbidden3.json | 134 +++---- .../multiscales_transform_missing_params.json | 196 +++++----- ...multiscales_transform_no_input_output.json | 144 +++---- ...ultiscales_transform_no_input_output2.json | 166 ++++---- .../spec/valid/image/custom_type_axes.json | 8 +- .../spec/valid/image/invalid_axis_units.json | 8 +- .../spec/valid/image/many_axes.json | 8 +- .../spec/valid/image/many_space_axes.json | 8 +- .../spec/valid/image/mismatch_axes_units.json | 8 +- .../spec/valid/image/missing_name.json | 8 +- .../spec/valid/image/missing_space_axes.json | 9 +- .../valid/image/multiscales_orientation.json | 92 ++--- ...cales_transform_additional_transforms.json | 355 +++++++++++------- ..._transform_additional_transforms_path.json | 256 +++++++------ .../image/multiscales_transform_identity.json | 92 ++--- .../image/multiscales_transform_sequence.json | 140 +++---- .../image/one_custom_one_space_axis.json | 8 +- .../spec/valid/image/one_space_axes.json | 8 +- .../spec/valid/image/single_axis.json | 8 +- .../spec/valid/image/untyped_axes.json | 8 +- .../spec/valid/omero/full_omero_metadata.json | 8 +- tests/attributes/spec/valid/scene/scene.json | 27 +- .../spec/valid/scene/tile_stitching.json | 152 ++++---- .../spec/valid/transforms/affine.json | 72 +++- .../spec/valid/transforms/affineParams.json | 23 +- .../spec/valid/transforms/byDimension.json | 43 ++- .../spec/valid/transforms/identity.json | 10 +- .../spec/valid/transforms/mapAxis.json | 77 +++- .../spec/valid/transforms/projectAxis.json | 77 +++- .../spec/valid/transforms/projectAxis2.json | 86 +++-- .../spec/valid/transforms/rotation.json | 35 +- .../spec/valid/transforms/scale.json | 10 +- .../duplicate_orientation.ome.zarr/zarr.json | 92 ++--- .../zarr.json | 92 ++--- .../zarr.json | 92 ++--- .../non_space_orientation.ome.zarr/zarr.json | 90 ++--- 86 files changed, 3669 insertions(+), 2800 deletions(-) diff --git a/tests/attributes/spec/invalid/image/duplicate_axes.json b/tests/attributes/spec/invalid/image/duplicate_axes.json index 73849bb1..2e774873 100644 --- a/tests/attributes/spec/invalid/image/duplicate_axes.json +++ b/tests/attributes/spec/invalid/image/duplicate_axes.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/duplicate_orientation.json b/tests/attributes/spec/invalid/image/duplicate_orientation.json index 72f92916..0bb76b98 100644 --- a/tests/attributes/spec/invalid/image/duplicate_orientation.json +++ b/tests/attributes/spec/invalid/image/duplicate_orientation.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/image/duplicate_scale.json b/tests/attributes/spec/invalid/image/duplicate_scale.json index 96590047..9be3748b 100644 --- a/tests/attributes/spec/invalid/image/duplicate_scale.json +++ b/tests/attributes/spec/invalid/image/duplicate_scale.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } }, { "scale": [ @@ -39,8 +43,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_channels_color.json b/tests/attributes/spec/invalid/image/invalid_channels_color.json index a89c7c56..4c3e9381 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_color.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_color.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_channels_window.json b/tests/attributes/spec/invalid/image/invalid_channels_window.json index 8990cc5d..911b23ef 100644 --- a/tests/attributes/spec/invalid/image/invalid_channels_window.json +++ b/tests/attributes/spec/invalid/image/invalid_channels_window.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json index 2b565633..7f86f259 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_input.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"name": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "name": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json index 02b43760..cba67e47 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscale_transform_output.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"path": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "path": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json b/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json index 66fbca49..200428b1 100644 --- a/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json +++ b/tests/attributes/spec/invalid/image/invalid_multiscales_transformations.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_path.json b/tests/attributes/spec/invalid/image/invalid_path.json index dec19824..ddf12a29 100644 --- a/tests/attributes/spec/invalid/image/invalid_path.json +++ b/tests/attributes/spec/invalid/image/invalid_path.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/invalid_transformation_type.json b/tests/attributes/spec/invalid/image/invalid_transformation_type.json index 1061d605..3ace8f15 100644 --- a/tests/attributes/spec/invalid/image/invalid_transformation_type.json +++ b/tests/attributes/spec/invalid/image/invalid_transformation_type.json @@ -30,8 +30,12 @@ 1 ], "type": "translation", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_axes_name.json b/tests/attributes/spec/invalid/image/missing_axes_name.json index 254f8460..c7aa01ed 100644 --- a/tests/attributes/spec/invalid/image/missing_axes_name.json +++ b/tests/attributes/spec/invalid/image/missing_axes_name.json @@ -28,8 +28,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json b/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json index 5bd8cc53..ebea267b 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_system_axes.json @@ -18,8 +18,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json b/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json index aef01c1f..2b25e8ca 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_system_name.json @@ -27,8 +27,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_coordinate_systems.json b/tests/attributes/spec/invalid/image/missing_coordinate_systems.json index 51e39016..79e89103 100644 --- a/tests/attributes/spec/invalid/image/missing_coordinate_systems.json +++ b/tests/attributes/spec/invalid/image/missing_coordinate_systems.json @@ -13,8 +13,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_path.json b/tests/attributes/spec/invalid/image/missing_path.json index 682a2d0f..012b5e04 100644 --- a/tests/attributes/spec/invalid/image/missing_path.json +++ b/tests/attributes/spec/invalid/image/missing_path.json @@ -29,8 +29,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/missing_scale.json b/tests/attributes/spec/invalid/image/missing_scale.json index dbff93b6..0e7ddfb5 100644 --- a/tests/attributes/spec/invalid/image/missing_scale.json +++ b/tests/attributes/spec/invalid/image/missing_scale.json @@ -30,8 +30,12 @@ 1 ], "type": "translation", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/no_axes.json b/tests/attributes/spec/invalid/image/no_axes.json index 56bbc915..68739a0d 100644 --- a/tests/attributes/spec/invalid/image/no_axes.json +++ b/tests/attributes/spec/invalid/image/no_axes.json @@ -14,8 +14,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/invalid/image/non_existent_orientation.json b/tests/attributes/spec/invalid/image/non_existent_orientation.json index 95b07777..0b8fea72 100644 --- a/tests/attributes/spec/invalid/image/non_existent_orientation.json +++ b/tests/attributes/spec/invalid/image/non_existent_orientation.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "top-to-bottom" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "empty-to-full" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/image/non_existent_orientation_type.json b/tests/attributes/spec/invalid/image/non_existent_orientation_type.json index 90b4fea9..6f4e1440 100644 --- a/tests/attributes/spec/invalid/image/non_existent_orientation_type.json +++ b/tests/attributes/spec/invalid/image/non_existent_orientation_type.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "kilometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "kilometer", + "discrete": false, "orientation": { "type": "geographical", "value": "east-to-west" } - }, - { - "type": "space", - "name": "x", - "unit": "parsec", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "parsec", + "discrete": false, "orientation": { "type": "astronomical", "value": "nadir-to-zenith" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/image/non_space_orientation.json b/tests/attributes/spec/invalid/image/non_space_orientation.json index 767e9db6..d4141340 100644 --- a/tests/attributes/spec/invalid/image/non_space_orientation.json +++ b/tests/attributes/spec/invalid/image/non_space_orientation.json @@ -1,55 +1,59 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "custom", - "name": "m", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "custom", + "name": "m", + "discrete": false, "orientation": { "type": "anatomical", "value": "anterior-to-posterior" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/omero/missing_channels.json b/tests/attributes/spec/invalid/omero/missing_channels.json index a96fb53b..892be673 100644 --- a/tests/attributes/spec/invalid/omero/missing_channels.json +++ b/tests/attributes/spec/invalid/omero/missing_channels.json @@ -44,8 +44,7 @@ ] } ], - "omero": { - } + "omero": {} }, "_conformance": { "schema": { diff --git a/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json b/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json index fa15fa57..0eaa517f 100644 --- a/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json +++ b/tests/attributes/spec/invalid/scene/scene_bijection_forward_missing_params.json @@ -1,60 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "scene": { - "coordinateSystems": [ - { - "name": "one", - "axes": [ + "ome": { + "version": "0.9.dev2", + "scene": { + "coordinateSystems": [ + { + "name": "one", + "axes": [ { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] - }, - { - "name": "two", - "axes": [ + ] + }, + { + "name": "two", + "axes": [ { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] + ] + } + ], + "coordinateTransformations": [ + { + "type": "bijection", + "input": "one", + "output": "two", + "forward": { + "type": "scale" } - ], - "coordinateTransformations": [ - { - "type": "bijection", - "input": "one", - "output": "two", - "forward": { - "type": "scale" - } - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false + } + ] } + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" + }, + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json b/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json index 50e4b6f8..b23513e5 100644 --- a/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json +++ b/tests/attributes/spec/invalid/scene/scene_bijection_inverse_missing_params.json @@ -1,61 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "scene": { - "coordinateSystems": [ - { - "name": "one", - "axes": [ + "ome": { + "version": "0.9.dev2", + "scene": { + "coordinateSystems": [ + { + "name": "one", + "axes": [ { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] - }, - { - "name": "two", - "axes": [ + ] + }, + { + "name": "two", + "axes": [ { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] + ] + } + ], + "coordinateTransformations": [ + { + "type": "bijection", + "input": "one", + "output": "two", + "inverse": { + "type": "scale" } - ], - "coordinateTransformations": [ - { - "type": "bijection", - "input": "one", - "output": "two", - "inverse": - { - "type": "scale" - } - } - ] - } - }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false + } + ] } + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" + }, + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json b/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json index 7237948c..2bcc14da 100644 --- a/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json +++ b/tests/attributes/spec/invalid/scene/scene_input_output_not_object.json @@ -1,75 +1,87 @@ { - "ome": { - "version": "0.9.dev2", - "scene": { - "coordinateTransformations": [ - { - "type": "translation", - "output": "world", - "input": {"path": "tile_0", "name": "physical"}, - "translation": [ - 0, - 0 - ], - "name": "tile_0_mm to world" - }, - { - "type": "translation", - "output": "world", - "input": {"path": "tile_1", "name": "physical"}, - "translation": [ - 0, - 348 - ], - "name": "tile_1_mm to world" - }, + "ome": { + "version": "0.9.dev2", + "scene": { + "coordinateTransformations": [ + { + "type": "translation", + "output": "world", + "input": { + "path": "tile_0", + "name": "physical" + }, + "translation": [ + 0, + 0 + ], + "name": "tile_0_mm to world" + }, + { + "type": "translation", + "output": "world", + "input": { + "path": "tile_1", + "name": "physical" + }, + "translation": [ + 0, + 348 + ], + "name": "tile_1_mm to world" + }, + { + "type": "translation", + "output": "world", + "input": { + "path": "tile_2", + "name": "physical" + }, + "translation": [ + 276, + 0 + ], + "name": "tile_2_mm to world" + }, + { + "type": "translation", + "output": "world", + "input": { + "path": "tile_3", + "name": "physical" + }, + "translation": [ + 276, + 348 + ], + "name": "tile_3_mm to world" + } + ], + "coordinateSystems": [ + { + "name": "world", + "axes": [ { - "type": "translation", - "output": "world", - "input": {"path": "tile_2", "name": "physical"}, - "translation": [ - 276, - 0 - ], - "name": "tile_2_mm to world" + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "translation", - "output": "world", - "input": {"path": "tile_3", "name": "physical"}, - "translation": [ - 276, - 348 - ], - "name": "tile_3_mm to world" - } - ], - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - } - ] + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] + ] } - }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false + ] } + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" + }, + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/scene/scene_missing_scene.json b/tests/attributes/spec/invalid/scene/scene_missing_scene.json index 7e8198db..b32e41bd 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_scene.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_scene.json @@ -1,31 +1,31 @@ { - "ome": { - "version": "0.9.dev2", - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - } - ] - } + "ome": { + "version": "0.9.dev2", + "coordinateSystems": [ + { + "name": "world", + "axes": [ + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + } ] + } + ] + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false - } + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/scene/scene_missing_transformations.json b/tests/attributes/spec/invalid/scene/scene_missing_transformations.json index b91ad259..cc63b8b6 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_transformations.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_transformations.json @@ -1,33 +1,33 @@ { - "ome": { - "version": "0.9.dev2", - "scene": { - "coordinateSystems": [ + "ome": { + "version": "0.9.dev2", + "scene": { + "coordinateSystems": [ + { + "name": "world", + "axes": [ { - "name": "world", - "axes": [ - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - } - ] + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] + ] } - }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false + ] } + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" + }, + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/scene/scene_missing_version.json b/tests/attributes/spec/invalid/scene/scene_missing_version.json index 6b0eaa20..498cd066 100644 --- a/tests/attributes/spec/invalid/scene/scene_missing_version.json +++ b/tests/attributes/spec/invalid/scene/scene_missing_version.json @@ -1,30 +1,30 @@ { - "ome": { - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - } - ] - } + "ome": { + "coordinateSystems": [ + { + "name": "world", + "axes": [ + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + } ] + } + ] + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: ", - "valid": false - } + "description": "Tests for the scene JSON schema: ", + "valid": false + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json b/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json index c8ec4849..68db0fdf 100644 --- a/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json +++ b/tests/attributes/spec/invalid/transforms/bad_affine_no_affine.json @@ -1,55 +1,55 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "affine", - "input": "array", - "output": "physical" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "affine", + "input": "array", + "output": "physical" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json b/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json index c23cceb8..3d33ed85 100644 --- a/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json +++ b/tests/attributes/spec/invalid/transforms/bad_affine_no_input_output.json @@ -1,57 +1,65 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "affine", - "affine": [ - [1, 0, 0], - [0, 1, 0] - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "affine", + "affine": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json b/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json index 3f84287b..7c0f5bef 100644 --- a/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json +++ b/tests/attributes/spec/invalid/transforms/bad_byDimension_no_input_output_axes.json @@ -1,87 +1,87 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "output": "output", - "input": "physical", - "transformations": [ - { - "type": "scale", - "scale": [ - 2 - ] - }, - { - "type": "translation", - "translation": [ - -10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "output": "output", + "input": "physical", + "transformations": [ + { + "type": "scale", + "scale": [ + 2 + ] + }, + { + "type": "translation", + "translation": [ + -10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json b/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json index 7ddf6c10..d4975234 100644 --- a/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json +++ b/tests/attributes/spec/invalid/transforms/bad_byDimension_wrong axes_type.json @@ -1,87 +1,99 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "byDimension", - "output": "output", - "input": "physical", - "transformations": [ - { - "type": "scale", - "inputAxes": ["x"], - "outputAxes": ["x"], - "scale": [2] - }, - { - "type": "translation", - "inputAxes": ["y"], - "outputAxes": ["y"], - "translation": [-10] - } - ], - "name": "transform-name" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "byDimension", + "output": "output", + "input": "physical", + "transformations": [ + { + "type": "scale", + "inputAxes": [ + "x" + ], + "outputAxes": [ + "x" + ], + "scale": [ + 2 + ] + }, + { + "type": "translation", + "inputAxes": [ + "y" + ], + "outputAxes": [ + "y" + ], + "translation": [ + -10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis.json index b6071181..65d39c50 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis.json @@ -1,74 +1,81 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "mapAxis", - "input": "physical", - "output": "output", - "mapAxis": [0, 1, 2, 3, 4, 5], - "name": "map-transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "mapAxis", + "input": "physical", + "output": "output", + "mapAxis": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "name": "map-transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json index c4f36cf8..69dfe540 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis2.json @@ -1,74 +1,79 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "mapAxis", - "input": "physical", - "output": "output", - "mapAxis": [-1, 1, 2, 3], - "name": "map-transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "mapAxis", + "input": "physical", + "output": "output", + "mapAxis": [ + -1, + 1, + 2, + 3 + ], + "name": "map-transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json index 3bf35b56..ba0b7cb5 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis3.json @@ -1,74 +1,79 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "mapAxis", - "input": "physical", - "output": "output", - "mapAxis": [0, 1, 2, 5], - "name": "map-transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "mapAxis", + "input": "physical", + "output": "output", + "mapAxis": [ + 0, + 1, + 2, + 5 + ], + "name": "map-transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json index ef4ca097..bcf8dd6d 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis4.json @@ -1,74 +1,77 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "mapAxis", - "input": "physical", - "output": "output", - "mapAxis": [0, 0], - "name": "map-transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "mapAxis", + "input": "physical", + "output": "output", + "mapAxis": [ + 0, + 0 + ], + "name": "map-transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json b/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json index eb2c5128..8aa8b9a9 100644 --- a/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json +++ b/tests/attributes/spec/invalid/transforms/bad_mapaxis5.json @@ -1,73 +1,73 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "mapAxis", - "input": "physical", - "output": "output", - "name": "map-transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "mapAxis", + "input": "physical", + "output": "output", + "name": "map-transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json index 97d1463a..20ddb09b 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_non_unique.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,26 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "createdOutputs": [3, 3] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "createdOutputs": [ + 3, + 3 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json index d255ac4e..581afed3 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_high_dim.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,25 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "createdOutputs": [5] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "createdOutputs": [ + 5 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json index cf253658..b3270dfc 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_insert_too_many.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,28 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "createdOutputs": [0, 1, 2, 3] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "createdOutputs": [ + 0, + 1, + 2, + 3 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json index f2fee426..cdd9465a 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_missing_op.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,18 +150,22 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"} + "input": { + "name": "physical" + }, + "output": { + "name": "world" + } } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json index 963ab4d3..e5bbbedb 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_non_unique.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,26 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "droppedInputs": [3, 3] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "droppedInputs": [ + 3, + 3 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json index 29c1ed18..249f3b31 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_high_dim.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,25 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "droppedInputs": [5] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "droppedInputs": [ + 5 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json index 9d4fc9b0..2810c111 100644 --- a/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json +++ b/tests/attributes/spec/invalid/transforms/bad_projectAxis_remove_too_many.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,28 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "droppedInputs": [0, 1, 2, 3] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "droppedInputs": [ + 0, + 1, + 2, + 3 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": false + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": false } } diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation.json b/tests/attributes/spec/invalid/transforms/bad_rotation.json index ee7bcd01..da830cbb 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation.json @@ -1,73 +1,76 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "rotation", - "input": "physical", - "output": "output", - "rotation": [0, 1] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "rotation", + "input": "physical", + "output": "output", + "rotation": [ + 0, + 1 + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation2.json b/tests/attributes/spec/invalid/transforms/bad_rotation2.json index 173fa983..d35cd319 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation2.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation2.json @@ -1,72 +1,72 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "rotation", - "input": "physical", - "output": "output" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "rotation", + "input": "physical", + "output": "output" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_rotation3.json b/tests/attributes/spec/invalid/transforms/bad_rotation3.json index f1be5e5a..f2ff3797 100644 --- a/tests/attributes/spec/invalid/transforms/bad_rotation3.json +++ b/tests/attributes/spec/invalid/transforms/bad_rotation3.json @@ -1,76 +1,84 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "rotation", - "input": "physical", - "output": "output", - "rotation": [ - [1, 0, 0], - [0, 1, 0] - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "rotation", + "input": "physical", + "output": "output", + "rotation": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json b/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json index 97a07779..af590c38 100644 --- a/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json +++ b/tests/attributes/spec/invalid/transforms/bad_scale_path_not_allowed.json @@ -1,73 +1,73 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "scale", - "input": "physical", - "output": "output", - "path": "scale_factors_path" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "scale", + "input": "physical", + "output": "output", + "path": "scale_factors_path" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json b/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json index 3856a783..ac46a376 100644 --- a/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json +++ b/tests/attributes/spec/invalid/transforms/bad_translate_path_not_allowed.json @@ -1,73 +1,73 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": "physical", - "input": "array", - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "translation", - "input": "physical", - "output": "output", - "path": "translation_params_path" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": "physical", + "input": "array", + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "translation", + "input": "physical", + "output": "output", + "path": "translation_params_path" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json index 7f6598e3..da0f202a 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden.json @@ -1,72 +1,84 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "output": "physical", - "input": "array", - "transformations": [ - { - "type": "rotation", - "rotation": [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "output": "physical", + "input": "array", + "transformations": [ + { + "type": "rotation", + "rotation": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json index 06d9a734..55e3dee3 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden2.json @@ -1,72 +1,84 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "output": "physical", - "input": "array", - "transformations": [ - { - "type": "affine", - "affine": [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "output": "physical", + "input": "array", + "transformations": [ + { + "type": "affine", + "affine": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json index 634369d8..131e8e3f 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_forbidden3.json @@ -1,69 +1,73 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "output": "physical", - "input": "array", - "transformations": [ - { - "type": "mapAxis", - "mapAxis": [0, 1, 2], - "name": "a_map_axis_transform" - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "output": "physical", + "input": "array", + "transformations": [ + { + "type": "mapAxis", + "mapAxis": [ + 0, + 1, + 2 + ], + "name": "a_map_axis_transform" + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json index af0c3da0..0015df02 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_missing_params.json @@ -1,99 +1,103 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "input": "array", - "output": "physical", - "transformations": [ - { - "type": "scale", - "scale": [1, 1, 1] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "affine", - "name": "some_additional_transform", - "input": "physical", - "output": "output" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "input": "array", + "output": "physical", + "transformations": [ + { + "type": "scale", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "affine", + "name": "some_additional_transform", + "input": "physical", + "output": "output" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, - "valid": false - } + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json index d00ddf85..aa4d810b 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output.json @@ -1,70 +1,82 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "transformations": [ - { - "type": "rotation", - "rotation": [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "transformations": [ + { + "type": "rotation", + "rotation": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json index b09927fa..a30973d1 100644 --- a/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json +++ b/tests/attributes/spec/invalid/transforms/multiscales_transform_no_input_output2.json @@ -1,79 +1,95 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "input": "array", - "output": "physical", - "transformations": [ - { - "type": "rotation", - "rotation": [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "translation", - "translation": [1, 1, 1], - "name": "some_additional_transform" - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "input": "array", + "output": "physical", + "transformations": [ + { + "type": "rotation", + "rotation": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "translation", + "translation": [ + 1, + 1, + 1 + ], + "name": "some_additional_transform" + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/attributes/spec/valid/image/custom_type_axes.json b/tests/attributes/spec/valid/image/custom_type_axes.json index 2f7f3103..0590f155 100644 --- a/tests/attributes/spec/valid/image/custom_type_axes.json +++ b/tests/attributes/spec/valid/image/custom_type_axes.json @@ -34,8 +34,12 @@ 1, 1 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] diff --git a/tests/attributes/spec/valid/image/invalid_axis_units.json b/tests/attributes/spec/valid/image/invalid_axis_units.json index aeaa689a..28399752 100644 --- a/tests/attributes/spec/valid/image/invalid_axis_units.json +++ b/tests/attributes/spec/valid/image/invalid_axis_units.json @@ -29,8 +29,12 @@ 0.13, 0.13 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] diff --git a/tests/attributes/spec/valid/image/many_axes.json b/tests/attributes/spec/valid/image/many_axes.json index f50955ff..3433330f 100644 --- a/tests/attributes/spec/valid/image/many_axes.json +++ b/tests/attributes/spec/valid/image/many_axes.json @@ -48,8 +48,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/many_space_axes.json b/tests/attributes/spec/valid/image/many_space_axes.json index cb337154..6c856ba5 100644 --- a/tests/attributes/spec/valid/image/many_space_axes.json +++ b/tests/attributes/spec/valid/image/many_space_axes.json @@ -38,8 +38,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/mismatch_axes_units.json b/tests/attributes/spec/valid/image/mismatch_axes_units.json index 08620256..880539fa 100644 --- a/tests/attributes/spec/valid/image/mismatch_axes_units.json +++ b/tests/attributes/spec/valid/image/mismatch_axes_units.json @@ -35,8 +35,12 @@ 0.13 ], "type": "scale", - "input": {"path": "0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/missing_name.json b/tests/attributes/spec/valid/image/missing_name.json index 5a3526dd..1f090d96 100644 --- a/tests/attributes/spec/valid/image/missing_name.json +++ b/tests/attributes/spec/valid/image/missing_name.json @@ -13,8 +13,12 @@ 1, 1 ], - "input": {"path": "path/to/0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "path/to/0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/missing_space_axes.json b/tests/attributes/spec/valid/image/missing_space_axes.json index 61d9c731..ed45c6de 100644 --- a/tests/attributes/spec/valid/image/missing_space_axes.json +++ b/tests/attributes/spec/valid/image/missing_space_axes.json @@ -28,8 +28,13 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} } + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } + } ] } ] diff --git a/tests/attributes/spec/valid/image/multiscales_orientation.json b/tests/attributes/spec/valid/image/multiscales_orientation.json index 702d1a0e..640bca7b 100644 --- a/tests/attributes/spec/valid/image/multiscales_orientation.json +++ b/tests/attributes/spec/valid/image/multiscales_orientation.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "posterior-to-anterior" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": true - } + } } diff --git a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json index bb601c77..88aafc34 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms.json @@ -1,149 +1,212 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "input": {"path": "array"}, - "output": {"name": "physical"}, - "transformations": [ - { - "type": "scale", - "scale": [1, 1, 1] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "sequence", - "input": {"name": "physical"}, - "output": {"name": "output"}, - "transformations": [ - { - "type": "rotation", - "rotation": [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ] - }, - { - "type": "translation", - "translation": [5, 10, 15] - }, - { - "type": "affine", - "affine": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0] - ] - }, - { - "type": "scale", - "scale": [2, 2, 2] - }, - { - "type": "mapAxis", - "mapAxis": [2, 1, 0] - }, - { - "type": "byDimension", - "transformations": [ - { - "transformation": { - "type": "scale", - "scale": [2] - }, - "outputAxes": [0], - "inputAxes": [0] - }, - { - "transformation": { - "type": "translation", - "translation": [-10] - }, - "outputAxes": [1], - "inputAxes": [1] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "input": { + "path": "array" + }, + "output": { + "name": "physical" + }, + "transformations": [ + { + "type": "scale", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "sequence", + "input": { + "name": "physical" + }, + "output": { + "name": "output" + }, + "transformations": [ + { + "type": "rotation", + "rotation": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "type": "translation", + "translation": [ + 5, + 10, + 15 + ] + }, + { + "type": "affine", + "affine": [ + [ + 1, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0 + ] + ] + }, + { + "type": "scale", + "scale": [ + 2, + 2, + 2 + ] + }, + { + "type": "mapAxis", + "mapAxis": [ + 2, + 1, + 0 + ] + }, + { + "type": "byDimension", + "transformations": [ + { + "transformation": { + "type": "scale", + "scale": [ + 2 + ] + }, + "outputAxes": [ + 0 + ], + "inputAxes": [ + 0 + ] + }, + { + "transformation": { + "type": "translation", + "translation": [ + -10 + ] + }, + "outputAxes": [ + 1 + ], + "inputAxes": [ + 1 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - } - } + "_conformance": { + "schema": { + "id": "schemas/image.schema" + } + } } diff --git a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json index 66d32fa1..21e9e9a5 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_additional_transforms_path.json @@ -1,119 +1,143 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - }, - { - "name": "output", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "input": {"path": "array"}, - "output": {"name": "physical"}, - "transformations": [ - { - "type": "scale", - "scale": [1, 1, 1] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ], - "coordinateTransformations": [ - { - "type": "sequence", - "input": {"name": "physical"}, - "output": {"name": "output"}, - "transformations": [ - { - "type": "rotation", - "path": "rotation_params_path" - }, - { - "type": "translation", - "translation": [5, 10, 15] - }, - { - "type": "affine", - "path": "affine_params_path" - }, - { - "type": "scale", - "scale": [2, 2, 2] - }, - { - "type": "mapAxis", - "mapAxis": [2, 1, 0] - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + }, + { + "name": "output", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "input": { + "path": "array" + }, + "output": { + "name": "physical" + }, + "transformations": [ + { + "type": "scale", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ], + "coordinateTransformations": [ + { + "type": "sequence", + "input": { + "name": "physical" + }, + "output": { + "name": "output" + }, + "transformations": [ + { + "type": "rotation", + "path": "rotation_params_path" + }, + { + "type": "translation", + "translation": [ + 5, + 10, + 15 + ] + }, + { + "type": "affine", + "path": "affine_params_path" + }, + { + "type": "scale", + "scale": [ + 2, + 2, + 2 + ] + }, + { + "type": "mapAxis", + "mapAxis": [ + 2, + 1, + 0 + ] + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - } - } + "_conformance": { + "schema": { + "id": "schemas/image.schema" + } + } } diff --git a/tests/attributes/spec/valid/image/multiscales_transform_identity.json b/tests/attributes/spec/valid/image/multiscales_transform_identity.json index ff466a5c..ffe62620 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_identity.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_identity.json @@ -1,48 +1,52 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": true - } + } } diff --git a/tests/attributes/spec/valid/image/multiscales_transform_sequence.json b/tests/attributes/spec/valid/image/multiscales_transform_sequence.json index 22151083..ca71e4c9 100644 --- a/tests/attributes/spec/valid/image/multiscales_transform_sequence.json +++ b/tests/attributes/spec/valid/image/multiscales_transform_sequence.json @@ -1,71 +1,75 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "z", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "transformations": [ - { - "type": "scale", - "scale": [ - 4, - 3, - 2 - ] - }, - { - "type": "translation", - "translation": [ - 30, - 20, - 10 - ] - } - ], - "name": "transform-name" - } - ] - } - ] - } - ] + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "z", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "sequence", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "transformations": [ + { + "type": "scale", + "scale": [ + 4, + 3, + 2 + ] + }, + { + "type": "translation", + "translation": [ + 30, + 20, + 10 + ] + } + ], + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - } - } + "_conformance": { + "schema": { + "id": "schemas/image.schema" + } + } } diff --git a/tests/attributes/spec/valid/image/one_custom_one_space_axis.json b/tests/attributes/spec/valid/image/one_custom_one_space_axis.json index 4b4fbf86..b93461d5 100644 --- a/tests/attributes/spec/valid/image/one_custom_one_space_axis.json +++ b/tests/attributes/spec/valid/image/one_custom_one_space_axis.json @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/one_space_axes.json b/tests/attributes/spec/valid/image/one_space_axes.json index 33a4fd4d..631c6a12 100644 --- a/tests/attributes/spec/valid/image/one_space_axes.json +++ b/tests/attributes/spec/valid/image/one_space_axes.json @@ -33,8 +33,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/single_axis.json b/tests/attributes/spec/valid/image/single_axis.json index 596ca0fa..8ddb0ff2 100644 --- a/tests/attributes/spec/valid/image/single_axis.json +++ b/tests/attributes/spec/valid/image/single_axis.json @@ -25,8 +25,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } diff --git a/tests/attributes/spec/valid/image/untyped_axes.json b/tests/attributes/spec/valid/image/untyped_axes.json index 34387b66..698f6694 100644 --- a/tests/attributes/spec/valid/image/untyped_axes.json +++ b/tests/attributes/spec/valid/image/untyped_axes.json @@ -33,8 +33,12 @@ 1, 1 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] diff --git a/tests/attributes/spec/valid/omero/full_omero_metadata.json b/tests/attributes/spec/valid/omero/full_omero_metadata.json index 61dcffc4..3bceaf4d 100644 --- a/tests/attributes/spec/valid/omero/full_omero_metadata.json +++ b/tests/attributes/spec/valid/omero/full_omero_metadata.json @@ -35,8 +35,12 @@ 1, 1 ], - "input": {"path": "s0"}, - "output": {"name": "physical"}, + "input": { + "path": "s0" + }, + "output": { + "name": "physical" + }, "type": "scale" } ] diff --git a/tests/attributes/spec/valid/scene/scene.json b/tests/attributes/spec/valid/scene/scene.json index 53e3c0d0..2ba4d06b 100644 --- a/tests/attributes/spec/valid/scene/scene.json +++ b/tests/attributes/spec/valid/scene/scene.json @@ -4,8 +4,13 @@ "scene": { "coordinateTransformations": [ { - "input": {"path": "4995115_cropped_400_100_400_400_rot10.zarr", "name": "rotated"}, - "output": {"name": "translated_x50"}, + "input": { + "path": "4995115_cropped_400_100_400_400_rot10.zarr", + "name": "rotated" + }, + "output": { + "name": "translated_x50" + }, "name": "translate_tile_to_stitched_position", "type": "translation", "translation": [ @@ -16,8 +21,13 @@ ] }, { - "input": {"path": "4995115_cropped_700_700_400_400_rot45.zarr", "name": "rotated"}, - "output": {"name": "translated_x50"}, + "input": { + "path": "4995115_cropped_700_700_400_400_rot45.zarr", + "name": "rotated" + }, + "output": { + "name": "translated_x50" + }, "name": "translate_tile_to_stitched_position", "type": "translation", "translation": [ @@ -28,8 +38,13 @@ ] }, { - "input": {"name": "translated_x50"}, - "output": {"path": "4995115_full.zarr", "name": "physical"}, + "input": { + "name": "translated_x50" + }, + "output": { + "path": "4995115_full.zarr", + "name": "physical" + }, "name": "translate_tile_to_stitched_position", "type": "translation", "translation": [ diff --git a/tests/attributes/spec/valid/scene/tile_stitching.json b/tests/attributes/spec/valid/scene/tile_stitching.json index 4d609544..29cfbbff 100644 --- a/tests/attributes/spec/valid/scene/tile_stitching.json +++ b/tests/attributes/spec/valid/scene/tile_stitching.json @@ -1,74 +1,94 @@ { - "ome": { - "version": "0.9.dev2", - "scene":{ - "coordinateTransformations": [ - { - "type": "translation", - "output": {"name": "world"}, - "input": {"path": "tile_0", "name": "physical"}, - "translation": [ - 0, - 0 - ], - "name": "tile_0_mm to world" - }, - { - "type": "translation", - "output": {"name": "world"}, - "input": {"path": "tile_1", "name": "physical"}, - "translation": [ - 0, - 348 - ], - "name": "tile_1_mm to world" - }, + "ome": { + "version": "0.9.dev2", + "scene": { + "coordinateTransformations": [ + { + "type": "translation", + "output": { + "name": "world" + }, + "input": { + "path": "tile_0", + "name": "physical" + }, + "translation": [ + 0, + 0 + ], + "name": "tile_0_mm to world" + }, + { + "type": "translation", + "output": { + "name": "world" + }, + "input": { + "path": "tile_1", + "name": "physical" + }, + "translation": [ + 0, + 348 + ], + "name": "tile_1_mm to world" + }, + { + "type": "translation", + "output": { + "name": "world" + }, + "input": { + "path": "tile_2", + "name": "physical" + }, + "translation": [ + 276, + 0 + ], + "name": "tile_2_mm to world" + }, + { + "type": "translation", + "output": { + "name": "world" + }, + "input": { + "path": "tile_3", + "name": "physical" + }, + "translation": [ + 276, + 348 + ], + "name": "tile_3_mm to world" + } + ], + "coordinateSystems": [ + { + "name": "world", + "axes": [ { - "type": "translation", - "output": {"name": "world"}, - "input": {"path": "tile_2", "name": "physical"}, - "translation": [ - 276, - 0 - ], - "name": "tile_2_mm to world" + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false }, { - "type": "translation", - "output": {"name": "world"}, - "input": {"path": "tile_3", "name": "physical"}, - "translation": [ - 276, - 348 - ], - "name": "tile_3_mm to world" - } - ], - "coordinateSystems": [ - { - "name": "world", - "axes": [ - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false - }, - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false - } - ] + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false } - ] + ] } - }, - "_conformance": { - "schema": { - "id": "schemas/scene.schema" - }, - "description": "Tests for the scene JSON schema: " + ] } + }, + "_conformance": { + "schema": { + "id": "schemas/scene.schema" + }, + "description": "Tests for the scene JSON schema: " + } } diff --git a/tests/attributes/spec/valid/transforms/affine.json b/tests/attributes/spec/valid/transforms/affine.json index 0ce8bfa2..6d31610b 100644 --- a/tests/attributes/spec/valid/transforms/affine.json +++ b/tests/attributes/spec/valid/transforms/affine.json @@ -46,17 +46,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -67,17 +77,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -88,17 +108,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -109,8 +139,12 @@ { "type": "affine", "name": "physical-to-sheared", - "input": {"name": "physical"}, - "output": {"name": "sheared"}, + "input": { + "name": "physical" + }, + "output": { + "name": "sheared" + }, "affine": [ [ 3, @@ -128,11 +162,11 @@ } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with an affine transformation", - "valid": true + }, + "description": "Tests for a JSON document with an affine transformation", + "valid": true } } diff --git a/tests/attributes/spec/valid/transforms/affineParams.json b/tests/attributes/spec/valid/transforms/affineParams.json index ae48119c..c1e807d0 100644 --- a/tests/attributes/spec/valid/transforms/affineParams.json +++ b/tests/attributes/spec/valid/transforms/affineParams.json @@ -46,10 +46,17 @@ "coordinateTransformations": [ { "type": "scale", - "output": {"name": "physical"}, - "input": {"path": "array"}, + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, "name": "array-to-physical", - "scale": [0.5, 0.5] + "scale": [ + 0.5, + 0.5 + ] } ] } @@ -57,8 +64,12 @@ "coordinateTransformations": [ { "type": "affine", - "input": {"name": "physical"}, - "output": {"name": "sheared"}, + "input": { + "name": "physical" + }, + "output": { + "name": "sheared" + }, "path": "affineParams", "name": "shearing-transform" } @@ -68,7 +79,7 @@ }, "_conformance": { "schema": { - "id": "schemas/image.schema" + "id": "schemas/image.schema" }, "description": "Tests for the image JSON schema: " } diff --git a/tests/attributes/spec/valid/transforms/byDimension.json b/tests/attributes/spec/valid/transforms/byDimension.json index 83060bd0..f89b0a43 100644 --- a/tests/attributes/spec/valid/transforms/byDimension.json +++ b/tests/attributes/spec/valid/transforms/byDimension.json @@ -44,8 +44,12 @@ "coordinateTransformations": [ { "type": "identity", - "output": {"name": "array_coordinates"}, - "input": {"path": "s0"}, + "output": { + "name": "array_coordinates" + }, + "input": { + "path": "s0" + }, "name": "transform-name" } ] @@ -54,25 +58,40 @@ "coordinateTransformations": [ { "type": "byDimension", - "input": {"name": "array_coordinates"}, - "output": {"name": "physical"}, + "input": { + "name": "array_coordinates" + }, + "output": { + "name": "physical" + }, "transformations": [ { "transformation": { "type": "scale", - "scale": [2] + "scale": [ + 2 + ] }, - "outputAxes": [0], - "inputAxes": [0] + "outputAxes": [ + 0 + ], + "inputAxes": [ + 0 + ] }, { "transformation": { "type": "translation", - "translation": [-10] + "translation": [ + -10 + ] }, - "outputAxes": [1], - "inputAxes": [1] - + "outputAxes": [ + 1 + ], + "inputAxes": [ + 1 + ] } ], "name": "transform-name" @@ -83,7 +102,7 @@ }, "_conformance": { "schema": { - "id": "schemas/image.schema" + "id": "schemas/image.schema" }, "description": "Tests for the image JSON schema: byDimension transformation" } diff --git a/tests/attributes/spec/valid/transforms/identity.json b/tests/attributes/spec/valid/transforms/identity.json index 6d69a874..ee359321 100644 --- a/tests/attributes/spec/valid/transforms/identity.json +++ b/tests/attributes/spec/valid/transforms/identity.json @@ -29,8 +29,12 @@ "coordinateTransformations": [ { "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, "name": "transform-name" } ] @@ -41,7 +45,7 @@ }, "_conformance": { "schema": { - "id": "schemas/image.schema" + "id": "schemas/image.schema" }, "description": "Tests for the image JSON schema: identity transformation" } diff --git a/tests/attributes/spec/valid/transforms/mapAxis.json b/tests/attributes/spec/valid/transforms/mapAxis.json index 4d309f0c..9cfff33c 100644 --- a/tests/attributes/spec/valid/transforms/mapAxis.json +++ b/tests/attributes/spec/valid/transforms/mapAxis.json @@ -46,17 +46,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -67,17 +77,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -88,17 +108,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -109,19 +139,26 @@ { "type": "mapAxis", "name": "physical-to-sheared", - "input": {"name": "physical"}, - "output": {"name": "sheared"}, - "mapAxis": [1, 0] + "input": { + "name": "physical" + }, + "output": { + "name": "sheared" + }, + "mapAxis": [ + 1, + 0 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a mapAxis transformation", - "valid": true + }, + "description": "Tests for a JSON document with a mapAxis transformation", + "valid": true } } diff --git a/tests/attributes/spec/valid/transforms/projectAxis.json b/tests/attributes/spec/valid/transforms/projectAxis.json index aa4d5402..79700b74 100644 --- a/tests/attributes/spec/valid/transforms/projectAxis.json +++ b/tests/attributes/spec/valid/transforms/projectAxis.json @@ -57,17 +57,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1] + "scale": [ + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0] + "translation": [ + 0, + 0 + ] } ] } @@ -78,17 +88,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [2, 2] + "scale": [ + 2, + 2 + ] }, { "type": "translation", - "translation": [0.7071, 0.7071] + "translation": [ + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +119,27 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [4, 4] + "scale": [ + 4, + 4 + ] }, { "type": "translation", - "translation": [2.1213, 2.1213] + "translation": [ + 2.1213, + 2.1213 + ] } ] } @@ -120,19 +150,26 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "createdOutputs": [0, 1] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "createdOutputs": [ + 0, + 1 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": true + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": true } } diff --git a/tests/attributes/spec/valid/transforms/projectAxis2.json b/tests/attributes/spec/valid/transforms/projectAxis2.json index 0183ce24..d83cceb8 100644 --- a/tests/attributes/spec/valid/transforms/projectAxis2.json +++ b/tests/attributes/spec/valid/transforms/projectAxis2.json @@ -57,17 +57,29 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s0"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s0" + }, "name": "scale0_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 1, 1] + "scale": [ + 1, + 1, + 1 + ] }, { "type": "translation", - "translation": [0, 0, 0] + "translation": [ + 0, + 0, + 0 + ] } ] } @@ -78,17 +90,29 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s1"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s1" + }, "name": "scale1_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 2, 2] + "scale": [ + 1, + 2, + 2 + ] }, { "type": "translation", - "translation": [0, 0.7071, 0.7071] + "translation": [ + 0, + 0.7071, + 0.7071 + ] } ] } @@ -99,17 +123,29 @@ "coordinateTransformations": [ { "type": "sequence", - "output": {"name": "physical"}, - "input": {"path": "s2"}, + "output": { + "name": "physical" + }, + "input": { + "path": "s2" + }, "name": "scale2_to_physical", "transformations": [ { "type": "scale", - "scale": [1, 4, 4] + "scale": [ + 1, + 4, + 4 + ] }, { "type": "translation", - "translation": [0, 2.1213, 2.1213] + "translation": [ + 0, + 2.1213, + 2.1213 + ] } ] } @@ -120,20 +156,28 @@ { "type": "projectAxis", "name": "physical-to-world", - "input": {"name": "physical"}, - "output": {"name": "world"}, - "createdOutputs": [0], - "droppedInputs": [0] + "input": { + "name": "physical" + }, + "output": { + "name": "world" + }, + "createdOutputs": [ + 0 + ], + "droppedInputs": [ + 0 + ] } ] } ] }, - "_conformance": { - "schema": { + "_conformance": { + "schema": { "id": "schemas/image.schema" - }, - "description": "Tests for a JSON document with a projectAxis transformation", - "valid": true + }, + "description": "Tests for a JSON document with a projectAxis transformation", + "valid": true } } diff --git a/tests/attributes/spec/valid/transforms/rotation.json b/tests/attributes/spec/valid/transforms/rotation.json index ebc78089..8d6fdec3 100644 --- a/tests/attributes/spec/valid/transforms/rotation.json +++ b/tests/attributes/spec/valid/transforms/rotation.json @@ -46,23 +46,40 @@ "coordinateTransformations": [ { "type": "scale", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "scale": [1, 1], + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "scale": [ + 1, + 1 + ], "name": "array to physical" } ] } ], - "coordinateTransformations":[ + "coordinateTransformations": [ { "name": "rotation", - "input": {"name": "physical"}, - "output": {"name": "rotated"}, + "input": { + "name": "physical" + }, + "output": { + "name": "rotated" + }, "type": "rotation", "rotation": [ - [0, 1], - [-1, 0] + [ + 0, + 1 + ], + [ + -1, + 0 + ] ] } ] @@ -71,7 +88,7 @@ }, "_conformance": { "schema": { - "id": "schemas/image.schema" + "id": "schemas/image.schema" }, "description": "Tests for the image JSON schema: " } diff --git a/tests/attributes/spec/valid/transforms/scale.json b/tests/attributes/spec/valid/transforms/scale.json index 1f3aeb55..6b3e6c3d 100644 --- a/tests/attributes/spec/valid/transforms/scale.json +++ b/tests/attributes/spec/valid/transforms/scale.json @@ -29,8 +29,12 @@ "coordinateTransformations": [ { "type": "scale", - "output": {"name": "physical"}, - "input": {"path": "array"}, + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, "name": "transform-name", "scale": [ 3.0, @@ -45,7 +49,7 @@ }, "_conformance": { "schema": { - "id": "schemas/image.schema" + "id": "schemas/image.schema" }, "description": "Tests for the image JSON schema: " } diff --git a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json index 72f92916..0bb76b98 100644 --- a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json index 95b07777..0b8fea72 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "top-to-bottom" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "empty-to-full" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json index 90b4fea9..6f4e1440 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json @@ -1,56 +1,60 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "kilometer", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "kilometer", + "discrete": false, "orientation": { "type": "geographical", "value": "east-to-west" } - }, - { - "type": "space", - "name": "x", - "unit": "parsec", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "parsec", + "discrete": false, "orientation": { "type": "astronomical", "value": "nadir-to-zenith" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } diff --git a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json index 767e9db6..d4141340 100644 --- a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json @@ -1,55 +1,59 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "custom", - "name": "m", - "discrete": false, + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "custom", + "name": "m", + "discrete": false, "orientation": { "type": "anatomical", "value": "anterior-to-posterior" } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, "orientation": { "type": "anatomical", "value": "left-to-right" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": {"name": "physical"}, - "input": {"path": "array"}, - "name": "transform-name" - } - ] - } - ] - } - ] + } + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" + } + ] + } + ] + } + ] }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" - }, + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, "valid": false - } + } } From ec9e63933eb9a1e0eaa71822806a483f0dd05a9e Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:11:23 +0100 Subject: [PATCH 28/79] Fix editorconfig-checker rules --- examples/multiscales/multiscales_example_relative.json | 4 ++-- examples/multiscales/multiscales_reference_to_label.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/multiscales/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json index da22de0d..72ca6182 100644 --- a/examples/multiscales/multiscales_example_relative.json +++ b/examples/multiscales/multiscales_example_relative.json @@ -40,7 +40,7 @@ { "path": "s1", "coordinateTransformations": [ - { + { // the second scale level (downscaled by a factor of 2 relative to "s0" in zyx) "type": "sequence", "input" : {"path": "s1"}, @@ -74,7 +74,7 @@ "type": "translation", "translation": [0, 0, 1.5, 1.5, 1.5] } - ] + ] }] } ], diff --git a/examples/multiscales/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json index 450a4b1b..bea349a7 100644 --- a/examples/multiscales/multiscales_reference_to_label.json +++ b/examples/multiscales/multiscales_reference_to_label.json @@ -33,7 +33,7 @@ "input": {"path": "labels/cell_segmentation","name": "physical"}, "output": {"name": "physical"} } - ] + ] } ] } From 026137dd65d10ea29f8a4e4245c9a9d48381fd7d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:17:39 +0100 Subject: [PATCH 29/79] fix: schema version enum ordering --- schemas/_version.schema | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schemas/_version.schema b/schemas/_version.schema index db1602a9..7ea57b3d 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -5,7 +5,7 @@ "description": "OME-Zarr version.", "type": "string", "enum": [ - "0.9", - "0.9.dev2" + "0.9.dev2", + "0.9" ] } From d010dca194541cf0850ee40b26269e6afab46557 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 13:43:07 +0100 Subject: [PATCH 30/79] Add htmlproofer on CI --- .github/workflows/build-lint.yml | 36 ++++++++++++++++++++++++++++++++ version_history.md | 1 + 2 files changed, 37 insertions(+) create mode 100644 .github/workflows/build-lint.yml diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml new file mode 100644 index 00000000..0f642429 --- /dev/null +++ b/.github/workflows/build-lint.yml @@ -0,0 +1,36 @@ +name: "Build and Lint Site" + +on: + workflow_dispatch: + pull_request: + branches: ["main"] + paths: + - "images/**" + - "**/*.md" + - "examples/**/*.json" + - "schemas/*.schema*" + - "pyproject.toml" + - "readthedocs.yaml" + - "_version.py" + - "pre_build.py" + +concurrency: + group: build-lint-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-site: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v9.0.0 + - uses: extractions/setup-just@v4 + - run: just build + - name: Validate all links, enforce alt text + uses: athackst/htmlproofer-action@main + with: + directory: _build/html + disable_external: true + - name: Ensure no unexpected encoded HTML in output + run: | + ! fgrep -R 'lt;blockquote' _build/html diff --git a/version_history.md b/version_history.md index 04a39742..e7ead067 100644 --- a/version_history.md +++ b/version_history.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Pre-commit hook configuration for code quality +- Internal link validation on CI ### Removed From 68afb1f2672674f9f92dc4ad39f8d7882bf6d8e7 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:09:20 +0100 Subject: [PATCH 31/79] Run build-lint and codespell on every PR --- .github/workflows/build-lint.yml | 11 +---------- .github/workflows/codespell.yml | 2 -- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml index 0f642429..e1a0a782 100644 --- a/.github/workflows/build-lint.yml +++ b/.github/workflows/build-lint.yml @@ -2,17 +2,8 @@ name: "Build and Lint Site" on: workflow_dispatch: + push: pull_request: - branches: ["main"] - paths: - - "images/**" - - "**/*.md" - - "examples/**/*.json" - - "schemas/*.schema*" - - "pyproject.toml" - - "readthedocs.yaml" - - "_version.py" - - "pre_build.py" concurrency: group: build-lint-${{ github.ref }} diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 85498c35..b1349614 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -4,9 +4,7 @@ name: Codespell on: push: - branches: [main] pull_request: - branches: [main] permissions: contents: read From 8d16cf5a282019438e9abd3b78fabbb6c5ee60e9 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:24:52 +0100 Subject: [PATCH 32/79] Remove html-proofer Produced thousands of lines of output over tens of minutes --- .github/workflows/build-lint.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml index e1a0a782..8635f806 100644 --- a/.github/workflows/build-lint.yml +++ b/.github/workflows/build-lint.yml @@ -17,11 +17,11 @@ jobs: - uses: astral-sh/setup-uv@v9.0.0 - uses: extractions/setup-just@v4 - run: just build - - name: Validate all links, enforce alt text - uses: athackst/htmlproofer-action@main - with: - directory: _build/html - disable_external: true + # - name: Validate all links, enforce alt text + # uses: athackst/htmlproofer-action@main + # with: + # directory: _build/html + # disable_external: true - name: Ensure no unexpected encoded HTML in output run: | ! fgrep -R 'lt;blockquote' _build/html From b06b276de4dfdd42882a77233bee9671d0588f2c Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:32:15 +0100 Subject: [PATCH 33/79] minor format in pre_build --- pre_build.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pre_build.py b/pre_build.py index 090c9602..23a02694 100644 --- a/pre_build.py +++ b/pre_build.py @@ -1,9 +1,10 @@ # %% -import os import glob +import logging +import os from pathlib import Path + import jsonc as json -import logging # Suppress warnings from json-schema-for-humans about unresolvable URLs logging.getLogger().setLevel(logging.ERROR) From ae4c2acb95957295b13a3b5cb94592d33518fcda Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:32:27 +0100 Subject: [PATCH 34/79] just clean recipe --- justfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/justfile b/justfile index c69e86c2..0e4c27ff 100644 --- a/justfile +++ b/justfile @@ -35,3 +35,16 @@ pre-commit-install: # Run pre-commit lints on all files. pre-commit: uv run prek run --all-files + +clean: + rm -rf \ + _build \ + footer.md \ + _authors.md \ + examples/*.md \ + examples/**/*.md \ + schemas/*.md \ + schemas/**/*.md \ + schemas/**/*.html \ + schemas/**/*.css \ + schemas/**/*.js From 726f23482b246931379a00d0deccc646e3f61aa6 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:40:04 +0100 Subject: [PATCH 35/79] Split just clean into prebuild and build --- justfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/justfile b/justfile index 0e4c27ff..b5cd49a9 100644 --- a/justfile +++ b/justfile @@ -36,9 +36,9 @@ pre-commit-install: pre-commit: uv run prek run --all-files -clean: +# Clean up files generated by the pre-build script. +clean-prebuild: rm -rf \ - _build \ footer.md \ _authors.md \ examples/*.md \ @@ -48,3 +48,10 @@ clean: schemas/**/*.html \ schemas/**/*.css \ schemas/**/*.js + +# Clean up the built site. +clean-build: + rm -rf _build + +# Clean up all generated files. +clean: clean-prebuild clean-build From 21e7d5f626b58ba564ab54cf8c6507ad9a5f42a2 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 15:40:18 +0100 Subject: [PATCH 36/79] Minor formatting in version_history.md --- version_history.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/version_history.md b/version_history.md index e7ead067..705e4fd0 100644 --- a/version_history.md +++ b/version_history.md @@ -1,7 +1,9 @@ --- author: "" --- + # Version History + (ngff-spec:history)= All notable changes to this project will be documented in this file. From 61ae3c3ad3ef90e969e4e17a3a7a2267fa4c1ebb Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Thu, 3 Sep 2026 09:26:57 +0100 Subject: [PATCH 37/79] Remove changelog items unrelated to spec --- version_history.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/version_history.md b/version_history.md index 705e4fd0..9a8900e8 100644 --- a/version_history.md +++ b/version_history.md @@ -12,11 +12,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased -### Added - -- Pre-commit hook configuration for code quality -- Internal link validation on CI - ### Removed - [ome/ngff-spec#138](https://github.com/ome/ngff-spec/issues/138) Strict schemas and test cases From bd9e60566905d1a9b43df7fbc9c9288935eb01b5 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Thu, 3 Sep 2026 09:46:10 +0100 Subject: [PATCH 38/79] Just recipe for viewing built site --- justfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/justfile b/justfile index b5cd49a9..ea8b178a 100644 --- a/justfile +++ b/justfile @@ -8,6 +8,10 @@ _prebuild: build: _prebuild uv run jupyter book build --html --ci +# Open the built document in the web browser. Project must be explicitly built first. +view: + uv run python -m webbrowser "file://{{ justfile_directory() }}/_build/html/index.html" + # Build the book and start a local server to view it. serve: _prebuild uv run jupyter book start From 4f50e134f205766ddc8a13b18f164a4b2eb14030 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:34:16 +0100 Subject: [PATCH 39/79] Bump jupyterbook dependency to 2.0.2 Co-Authored-By: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fe203a27..36728380 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ requires-python = ">=3.10" dependencies = [ "json-schema-for-humans", "json_with_comments", - "jupyter-book==2.0.0b3", + "jupyter-book==2.0.2", "jsonschema_markdown", "mystmd==1.6.3", "tomli", From 028a2813e37db76e5ca01038cac15ea23c439ae6 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:39:12 +0100 Subject: [PATCH 40/79] Pull in 0.6 release changelog entry Co-Authored-By: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- version_history.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/version_history.md b/version_history.md index 9a8900e8..3302fb64 100644 --- a/version_history.md +++ b/version_history.md @@ -28,14 +28,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - [ome/ngff-spec#87](https://github.com/ome/ngff-spec/pull/87): some "omero" fields become optional. -## 0.6rc0 - 2026-07-01 +## 0.6 - 2026-09-14 ### Added - [RFC5](https://ngff.openmicroscopy.org/rfc/5/index.html) adopted: Transformations, coordinate systems and `scene` metadata. - Added `projectAxis` transform to add or drop dimensions at specified indices of the coordinate vector. - Added suggestion on which coordinate system to use for display in the spec document. -- New `projectAxis` transformation to add or drop dimensions explicitly. ### Changed @@ -54,7 +53,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Removed `version` field from `multiscales` metadata in the image schema (`schemas/image.schema`) since it is already required at `ome > version` - Removed `version` field from `plate`, `well` and `labels` metadata in the spec document since it is already required at `ome > version`. - ## [0.6.dev4] - 2026-04-22 ### Changed From f662a8fb8c43d1248411588b9ea7c107fc04988d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:41:45 +0100 Subject: [PATCH 41/79] Fix broken link https://github.com/ome/ngff-spec/pull/211 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 e19b82fc..3587fc8c 100644 --- a/index.md +++ b/index.md @@ -40,7 +40,7 @@ are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc Implementations may be expected (MUST) or encouraged (SHOULD) to support the reading of the data, but writing will usually be optional (MAY). Examples of transitional metadata include custom additions by implementations that are later submitted as a formal specification. -(See [bioformats2raw](#bf2raw-md)) +(See [bioformats2raw](#bf2raw))

Some of the JSON examples in this document include comments. From 584f56f20273205827186b836499fb4344e22e7d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:44:04 +0100 Subject: [PATCH 42/79] Prepend version to anchors Also use hyphens rather than colons. https://github.com/ome/ngff-spec/pull/205 Co-Authored-By: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- pre_build.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pre_build.py b/pre_build.py index 23a02694..40b116ef 100644 --- a/pre_build.py +++ b/pre_build.py @@ -6,6 +6,8 @@ import jsonc as json +from _version import __version__ + # Suppress warnings from json-schema-for-humans about unresolvable URLs logging.getLogger().setLevel(logging.ERROR) @@ -47,7 +49,7 @@ def build_json_examples(): for json_file in json_files: print(f'Processing {json_file}...') - crossref = f"examples:{example}:{Path(json_file).stem}" + crossref = f"{__version__}-examples-{example}-{Path(json_file).stem}" index_md += f"- [{Path(json_file).stem}](#{crossref})\n" json_file_name = Path(json_file).stem @@ -114,7 +116,7 @@ def build_json_schemas(): # insert mySt cross-reference at top of markdown files with open(output_path_md, 'r', encoding='utf-8') as md_file: md_content = md_file.read() - crossref = f"schemas:{Path(schema_file).stem}" + crossref = f"{__version__}-schemas-{Path(schema_file).stem}" md_content = f"""--- author: "" --- From 6fbbd237bb421a42080ab9bec5f30073fc65eec6 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:45:43 +0100 Subject: [PATCH 43/79] Use absolute URL to refer to schemas https://github.com/ome/ngff-spec/pull/203 Co-Authored-By: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- schemas/coordinate_systems.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/coordinate_systems.schema b/schemas/coordinate_systems.schema index bc442526..3b749a61 100644 --- a/schemas/coordinate_systems.schema +++ b/schemas/coordinate_systems.schema @@ -19,7 +19,7 @@ "description": "Name of coordinate system. Must be unique among all coordinate systems." }, "axes": { - "$ref": "axes.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/axes.schema" } }, "required": [ From 06c0d17c8a0a3cf222b63c8e54f0272b59f4aa5a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:50:55 +0100 Subject: [PATCH 44/79] Minor fixes from v0.6 release PR https://github.com/ome/ngff-spec/pull/202 Co-Authored-By: Johannes Soltwedel <38459088+jo-mueller@users.noreply.github.com> --- authors.yml | 2 +- index.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/authors.yml b/authors.yml index 54db00e2..e42e59e4 100644 --- a/authors.yml +++ b/authors.yml @@ -172,7 +172,7 @@ project: github: ziw-liu orcid: 0000-0001-7482-1299 - name: Tiago Lubiana - orrcid: 0000-0003-2473-2313 + orcid: 0000-0003-2473-2313 github: lubianat # N diff --git a/index.md b/index.md index 3587fc8c..bfbdb304 100644 --- a/index.md +++ b/index.md @@ -5,7 +5,7 @@ authors: " " --- # Version 0.9.dev2 -(ngff-spec:spec:0.9.dev2)= +(ngff-spec-0.9.dev2)= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -181,7 +181,7 @@ The OME-Zarr Metadata is stored in the various `zarr.json` files throughout the The OME-Zarr Metadata version MUST be consistent within a hierarchy. The group `attributes` MUST contain a key `ome`. The value of the `ome` key MUST be a JSON -object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec:spec:0.9.dev2). +object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-0.9.dev2). ```jsonc { From 5a06b2bd6ebd798e72c92dccc2d3b055036aa39e Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:59:09 +0100 Subject: [PATCH 45/79] Fix dependencies for tests Mainly jsonschema --- pyproject.toml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 36728380..7324b359 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,14 +13,8 @@ dependencies = [ "tomli", ] -[project.optional-dependencies] -testing = [ - "codespell", - "pytest", # https://docs.pytest.org/en/latest/contents.html -] - [dependency-groups] -test = ["pytest"] +test = ["pytest", "jsonschema"] lint = ["codespell", "prek"] dev = [ "rust-just", From 111474ef8e2b2b2d83fb2f06c8d1150ae964c6bf Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 15:59:37 +0100 Subject: [PATCH 46/79] Refer to current release as 0.9.dev2 in changelog --- version_history.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/version_history.md b/version_history.md index 3302fb64..293d95c3 100644 --- a/version_history.md +++ b/version_history.md @@ -12,6 +12,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased +## 0.9.dev2 - TBC + ### Removed - [ome/ngff-spec#138](https://github.com/ome/ngff-spec/issues/138) Strict schemas and test cases From c2d16ce8dd4b5d6e320c3b442315fae54280c02d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 16:00:17 +0100 Subject: [PATCH 47/79] Fix test config file discovery --- conformance/ome_zarr_conformance.py | 2 +- tests/test_validation.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py index 3b3f091c..3f397ae3 100644 --- a/conformance/ome_zarr_conformance.py +++ b/conformance/ome_zarr_conformance.py @@ -171,7 +171,7 @@ def main(raw_args=None): description=( "Feed sample Zarr data into a dingus CLI for validation. " "After the arguments shown, add a -- followed by the dingus CLI call; " - "e.g., `ome_zarr_conformance attributes --exclude-strict -- path/to/my/dingus -cli +args`. " + "e.g., `ome_zarr_conformance attributes -- path/to/my/dingus -cli +args`. " "The path to the attributes file or root of the zarr container will be appended to the dingus call." ) ) diff --git a/tests/test_validation.py b/tests/test_validation.py index a845fde2..d897ba46 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -75,7 +75,7 @@ def pytest_generate_tests(metafunc): suites.append(Suite(schema, test["data"], test["valid"])) # Examples - for config_filename in glob.glob("../examples/*/.config.json"): + for config_filename in glob.glob("examples/*/.config.json"): with open(config_filename) as o: data = json.load(o) schema_path = data["schema"] From 8343e8767465d94dc6d1d681ca5075db76d69ced Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Tue, 15 Sep 2026 16:02:20 +0100 Subject: [PATCH 48/79] Finish porting codespell config --- .github/workflows/codespell.yml | 2 +- pyproject.toml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index b1349614..559e74ba 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -1,4 +1,4 @@ -# Codespell configuration is within .codespellrc +# Codespell configuration is within pyproject.toml --- name: Codespell diff --git a/pyproject.toml b/pyproject.toml index 7324b359..19a7f497 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,8 +24,9 @@ dev = [ [tool.codespell] ignore-regex = '\bComparin\b' -skip = ".git,.codespellrc,references.bib,.venv,.tox,*.css,_build" +skip = ".git,references.bib,.venv,.tox,*.css,_build" ignore-words-list = "commend,Fuchsia" +check-hidden = true [tool.hatch.version] path = "_version.py" From c9d27e8864380c6dd30b1ba0640450023361524c Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Fri, 18 Sep 2026 16:19:55 +0100 Subject: [PATCH 49/79] Remove validation tests for examples These tests have not run in a long time due to a bug in path resolution. Since then, the examples have broadened beyond what these tests are capable of validating. Changing the examples to fix the tests would make them worse at their actual job, so they should be removed. --- tests/test_validation.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/tests/test_validation.py b/tests/test_validation.py index d897ba46..6c306a5c 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -74,23 +74,6 @@ def pytest_generate_tests(metafunc): ids.append("validate_" + str(test["formerly"]).split("/")[-1][0:-5]) suites.append(Suite(schema, test["data"], test["valid"])) - # Examples - for config_filename in glob.glob("examples/*/.config.json"): - with open(config_filename) as o: - data = json.load(o) - schema_path = data["schema"] - with open(schema_path) as f: - schema = json.load(f) - example_folder = os.path.dirname(config_filename) - for filename in glob.glob(f"{example_folder}/*.json"): - with open(filename) as f: - # Strip comments - data = "".join(line for line in f if not line.lstrip().startswith("//")) - data = json.loads(data) - data = data["attributes"] # Only validate the attributes object - ids.append("example_" + str(filename).split("/")[-1][0:-5]) - suites.append(Suite(schema, data, True)) # Assume true - metafunc.parametrize("suite", suites, ids=ids, indirect=True) From 1de9dd78c254947eee78865dc417e13bc469a07b Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 09:13:16 +0100 Subject: [PATCH 50/79] Use absolute IRIs in all cross-doc JSONSchema refs --- schemas/axes.schema | 2 +- schemas/scene.schema | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/schemas/axes.schema b/schemas/axes.schema index a0e7b029..818b3868 100644 --- a/schemas/axes.schema +++ b/schemas/axes.schema @@ -35,7 +35,7 @@ "description": "Unit for the axis" }, "orientation": { - "$ref": "axis_orientation.schema" + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/axis_orientation.schema" } }, "required": [ diff --git a/schemas/scene.schema b/schemas/scene.schema index dafada9d..98db4132 100644 --- a/schemas/scene.schema +++ b/schemas/scene.schema @@ -14,7 +14,7 @@ "scene":{ "properties": { "coordinateSystems": { - "$ref": "coordinate_systems.schema", + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_systems.schema", "description": "Coordinate systems to combine with transforms to define spatial relationships" }, "coordinateTransformations": { @@ -24,7 +24,7 @@ "items": { "allOf": [ { - "$ref": "coordinate_transformations.schema#/$defs/coordinateTransformation", + "$ref": "https://ngff.openmicroscopy.org/0.9.dev2/schemas/coordinate_transformations.schema#/$defs/coordinateTransformation", "description": "Parameters of any possible transform" }, { From a5af658264a81cfeb224e4d318be282837720247 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 09:15:21 +0100 Subject: [PATCH 51/79] replace commented-out htmlproofer config with TODO --- .github/workflows/build-lint.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml index 8635f806..dd4d91b5 100644 --- a/.github/workflows/build-lint.yml +++ b/.github/workflows/build-lint.yml @@ -17,11 +17,7 @@ jobs: - uses: astral-sh/setup-uv@v9.0.0 - uses: extractions/setup-just@v4 - run: just build - # - name: Validate all links, enforce alt text - # uses: athackst/htmlproofer-action@main - # with: - # directory: _build/html - # disable_external: true - name: Ensure no unexpected encoded HTML in output run: | ! fgrep -R 'lt;blockquote' _build/html + # TODO: htmlproofer would be nice to have, but currently generates a lot of noise From 133217c9efe8260f846e4618931a4307388c4e05 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 09:34:24 +0100 Subject: [PATCH 52/79] Update supported versions in schema --- schemas/_version.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/_version.schema b/schemas/_version.schema index 7ea57b3d..4fd5143a 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -6,6 +6,6 @@ "type": "string", "enum": [ "0.9.dev2", - "0.9" + "0.9.dev1" ] } From 569466f77e549d7624ba9ccc30c4e4e796d9686c Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:02:38 +0100 Subject: [PATCH 53/79] CoordinateSystem table --- index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/index.md b/index.md index bfbdb304..d3ce1fb2 100644 --- a/index.md +++ b/index.md @@ -198,6 +198,16 @@ object that MUST contain a `version` key, the value of which MUST be a string sp ### "coordinateSystems" metadata (coordinate-systems-md)= +:::{table} Object: CoordinateSystem +(object-coordinatesystem)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MUST | string, non-empty | Used to identify the coordinate system. | +| `axes` | MUST | array of [Axis](#object-axis) | Information about each array dimension. | + +::: + A coordinate system is a JSON object with a `name` field and an `axes` field. Every coordinate system: - MUST contain the field `name`. From c2c3e271f67be4a381e39c5ea95fb958f4fd1ba1 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:03:13 +0100 Subject: [PATCH 54/79] Axes tables --- index.md | 87 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/index.md b/index.md index d3ce1fb2..ec809673 100644 --- a/index.md +++ b/index.md @@ -248,6 +248,20 @@ See the [example below](#spec:example:coordinate_transformation_scale). #### "axes" metadata (axes-md)= +:::{table} Object: Axis +(object-axis)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MUST | string, non-empty | Used to identify the axis. | +| `type` | MUST | string | See below for axis types. | +| `discrete` | MAY | boolean, default `false` | Whether this axis should not be interpolated. | +| `unit` | SHOULD | string | See below for unit types. | +| `longName` | MAY | string | Description of an axis and its properties. | +| `orientation` | MAY | [Orientation](#object-orientation-anatomical) object | Used when an axis aligns with a canonical orientation of the sample. | + +::: + `axes` describes the dimensions of a coordinate systems and adds an interpretation to the samples along that dimension. @@ -281,42 +295,53 @@ The length of "axes" MUST be equal to the number of dimensions of the arrays tha ```{note} (spec:orientation-values)= +:::{table} Orientation variant: Anatomical +(object-orientation-anatomical)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"anatomical"` | Discriminator for the Anatomical variant. | +| `orientation` | MUST | [Anatomical Orientation](#enum-anatomical-orientation) enum | Known orientation type. | + +::: + When a spatial axis is aligned with a specific orientation, this can be indicated with the "orientation" field, which must have "type" "anatomical" (with further types to be added to the specification or as extensions in the future), and one of the values detailed below: -**Common to both bipeds and quadrupeds:** -- `left-to-right` -- `right-to-left` -- `proximal-to-distal` -- `distal-to-proximal` - -**Primarily for bipeds (humans):** -- `anterior-to-posterior` (front-to-back) -- `posterior-to-anterior` (back-to-front) -- `inferior-to-superior` (feet-to-head) -- `superior-to-inferior` (head-to-feet) -- `dorsal-to-palmar` (back of hand to palm) -- `palmar-to-dorsal` (palm to back of hand) -- `dorsal-to-plantar` (top of foot to sole) -- `plantar-to-dorsal` (sole to top of foot) - -**Primarily for quadrupeds:** -- `rostral-to-caudal` (nose/beak-to-tail, especially for nervous system) -- `caudal-to-rostral` (tail-to-nose/beak, especially for nervous system) -- `cranial-to-caudal` (head-to-tail) -- `caudal-to-cranial` (tail-to-head) -- `dorsal-to-ventral` (back/top-to-belly/bottom) -- `ventral-to-dorsal` (belly/bottom-to-back/top) - -**For layered and polarized tissues (subject-local):** -- `superficial-to-deep` (outer surface to inner depth, e.g. skin, gut, cortex) -- `deep-to-superficial` (inner depth to outer surface) -- `apical-to-basal` (apical to basal surface, e.g. epithelial layers, polarized cells) -- `basal-to-apical` (basal to apical surface) -- `apex-to-base` (tip to broad base, e.g. heart, lungs) -- `base-to-apex` (broad base to tip) +:::{table} Enum: Anatomical Orientation +(enum-anatomical-orientation)= + +| value | description | +| ----- | ----------- | +| `"left-to-right"` | Common for bipeds and quadrupeds. | +| `"right-to-left"` | Common for bipeds and quadrupeds. | +| `"proximal-to-distal"` | Common for bipeds and quadrupeds. | +| `"distal-to-proximal"` | Common for bipeds and quadrupeds. | +| `"anterior-to-posterior"` | Primarily for bipeds (humans); front-to-back. | +| `"posterior-to-anterior"` | Primarily for bipeds (humans); back-to-front. | +| `"inferior-to-superior"` | Primarily for bipeds (humans); feet-to-head. | +| `"superior-to-inferior"` | Primarily for bipeds (humans); head-to-feet. | +| `"dorsal-to-palmar"` | Primarily for bipeds (humans); back of hand to palm. | +| `"palmar-to-dorsal"` | Primarily for bipeds (humans); palm to back of hand. | +| `"dorsal-to-plantar"` | Primarily for bipeds (humans); top of foot to sole. | +| `"plantar-to-dorsal"` | Primarily for bipeds (humans); sole to top of foot. | +| `"rostral-to-caudal"` | Primarily for quadrupeds; nose/beak-to-tail, especially for nervous system. | +| `"caudal-to-rostral"` | Primarily for quadrupeds; tail-to-nose/beak, especially for nervous system. | +| `"cranial-to-caudal"` | Primarily for quadrupeds; head-to-tail. | +| `"caudal-to-cranial"` | Primarily for quadrupeds; tail-to-head. | +| `"dorsal-to-ventral"` | Primarily for quadrupeds; back/top-to-belly/bottom. | +| `"ventral-to-dorsal"` | Primarily for quadrupeds; belly/bottom-to-back/top. | +| `"superficial-to-deep"` | For layered and polarized tissues (subject-local); outer surface to inner depth, e.g. skin, gut, cortex. | +| `"deep-to-superficial"` | For layered and polarized tissues (subject-local); inner depth to outer surface. | +| `"apical-to-basal"` | For layered and polarized tissues (subject-local); apical to basal surface, e.g. epithelial layers, polarized cells. | +| `"basal-to-apical"` | For layered and polarized tissues (subject-local); basal to apical surface. | +| `"apex-to-base"` | For layered and polarized tissues (subject-local); tip to broad base, e.g. heart, lungs. | +| `"base-to-apex"` | For layered and polarized tissues (subject-local); broad base to tip. | + +::: + ``` Arrays are inherently discrete (see Array coordinate systems, below) From 10f77ca4db3f62d3014e2dc79bc4e52c8799895e Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:07:19 +0100 Subject: [PATCH 55/79] Coordinate transformation tables --- index.md | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 157 insertions(+), 11 deletions(-) diff --git a/index.md b/index.md index ec809673..3034e2a4 100644 --- a/index.md +++ b/index.md @@ -478,12 +478,18 @@ This means they represent functions from *points* in the input space to *points* A transform is a JSON object with the following fields: -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| [`type`](#transform-type-md) | string | yes | The type of the transformation, which determines the required and optional fields for that transformation. | -| `name` | string | no | A unique name for this transformation. | -| [`input`](#input-output-md) | object | yes, unless part of a wrapper transform ([`sequence`](#sequence-md), [`bijection`](#bijection-md), [`byDimension`](#bydimension-md)) | The input coordinate system for this transformation. | -| [`output`](#input-output-md) | object | yes, unless part of a wrapper transform ([`sequence`](#sequence-md), [`bijection`](#bijection-md), [`byDimension`](#bydimension-md)) | The output coordinate system for this transformation. | +:::{table} Object: CoordinateTransformation +(object-coordinatetransformation)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MAY | string | A unique name for this transformation. | +| `input` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The input coordinate system for this transformation. | +| `output` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The output coordinate system for this transformation. | +| `type` | MUST | string | Discriminator for CoordinateTransformation variants. | +| ... | MAY | any | Additional fields are strictly determined by the `type` discriminator. | + +::: The following transformations are supported: @@ -507,11 +513,15 @@ The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUS The `input` and `output` fields are objects structured as follows: -(input-output-md)= -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `name` | string | no | The name of the coordinate system. Required context-dependent ([see details](#coord-trafo-constraints)). | -| `path` | string | no | The path to a zarr group, if the coordinate system is defined in a different Zarr group. Required context-dependent ([see details](#coord-trafo-constraints)). | +:::{table} Object: CoordinateSystemReference +(object-coordinatesystemreference)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MAY | string | The name of the coordinate system. Required context-dependent ([see details](#coord-trafo-constraints)). | +| `path` | MAY | string | The path to a zarr group, if the coordinate system is defined in a different Zarr group. Required context-dependent ([see details](#coord-trafo-constraints)). | + +::: Implementations SHOULD prefer to store transformations as a sequence of less expressive transformations where possible (e.g., sequence[translation, rotation], instead of affine transformation with translation/rotation). @@ -765,6 +775,15 @@ otherwise it is given by the length of `axes` for the coordinate system with the ##### identity (identity-md)= +:::{table} CoordinateTransformation variant: Identity +(object-coordinatetransformation-identity)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"identity"` | Discriminator for the Identity variant. | + +::: + `identity` transformations map input coordinates to output coordinates without modification. The position of the i-th axis of the output coordinate system is set to the position of the ith axis of the input coordinate system. @@ -788,6 +807,16 @@ y = j ##### mapAxis (mapAxis-md)= +:::{table} CoordinateTransformation variant: MapAxis +(object-coordinatetransformation-mapaxis)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"mapAxis"` | Discriminator for the MapAxis variant. | +| `mapAxis` | MUST | array of unsigned integer | New axis order, as indices into the old axis order. | + +::: + `mapAxis` transformations describe axis permutations as a transpose vector of integers. Transformations MUST include a `mapAxis` field whose value is an array of integers that specifies the new ordering in terms of indices of the old order. @@ -827,6 +856,17 @@ y = i ##### projectAxis (projectAxis-md)= +:::{table} CoordinateTransformation variant: ProjectAxis +(object-coordinatetransformation-projectaxis)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"projectAxis"` | Discriminator for the ProjectAxis variant. | +| `droppedInputs` | MAY | array of unsigned integer | Which indices of the _input_ axes are to be dropped. | +| `createdOutputs` | MAY | array of unsigned integer | Which indices of the _output_ axes are newly created. | + +::: + `projectAxis` transformations project input coordinates from `N` dimensions to `M` dimensions by adding or dropping dimensions at specified indices of the coordinate vector. @@ -886,6 +926,16 @@ This is useful for example when projecting a 3D CYX image to a 2D YX image by dr ##### translation (translation-md)= +:::{table} CoordinateTransformation variant: Translation +(object-coordinatetransformation-translation)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"translation"` | Discriminator for the Translation variant. | +| `translation` | MUST | array of number | Values to add to the input coordinate. | + +::: + `translation` transformations are special cases of affine transformations. When possible, a translation transformation should be preferred to its equivalent affine. Input and output dimensionality MUST be identical @@ -913,6 +963,16 @@ y = j - 1.42 ##### scale (scale-md)= +:::{table} CoordinateTransformation variant: Scale +(object-coordinatetransformation-scale)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"scale"` | Discriminator for the Scale variant. | +| `scale` | MUST | array of number | Values to multiply the input coordinate by. | + +::: + `scale` transformations are special cases of affine transformations. When possible, a scale transformation SHOULD be preferred to its equivalent affine. Input and output dimensionality MUST be identical @@ -953,6 +1013,17 @@ these axes are typically not transformed, but must be represented in the scale p ##### affine (affine-md)= +:::{table} CoordinateTransformation variant: Affine +(object-coordinatetransformation-affine)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"affine"` | Discriminator for the Affine variant. | +| `affine` | MUST if `path` is omitted | array of array of number | Rows of the upper part of an affine matrix. | +| `path` | MUST if `affine` is omitted | string | Path to a Zarr array containing the upper part of an affine matrix. | + +::: + `affine`s are [matrix transformations](#matrix-trafo-md) from N-dimensional inputs to M-dimensional outputs. They are represented as the upper `(M)x(N+1)` sub-matrix of a `(M+1)x(N+1)` matrix in [homogeneous coordinates](https://en.wikipedia.org/wiki/Homogeneous_coordinates) (see examples). @@ -1041,6 +1112,17 @@ these axes are typically not transformed, but must be represented in the transfo ##### rotation (rotation-md)= +:::{table} CoordinateTransformation variant: Rotation +(object-coordinatetransformation-rotation)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"affine"` | Discriminator for the Affine variant. | +| `rotation` | MUST if `path` is omitted | array of array of number | Rows of a rotation matrix. | +| `path` | MUST if `rotation` is omitted | string | Path to a Zarr array containing a rotation matrix matrix. | + +::: + `rotation`s are [matrix transformations](#matrix-trafo-md) that are special cases of affine transformations. When possible, a rotation transformation SHOULD be used instead of an equivalent affine. Input and output dimensionality (N) MUST be identical. @@ -1076,6 +1158,16 @@ y = 1*i + 0*j ##### sequence (sequence-md)= +:::{table} CoordinateTransformation variant: Sequence +(object-coordinatetransformation-sequence)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"sequence"` | Discriminator for the Sequence variant. | +| `transformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations to apply in sequence; SHOULD omit `input`/`output` | + +::: + A `sequence` transformation consists of an ordered array of coordinate transformations, and is invertible if every coordinate transform in the array is invertible (though could be invertible in other cases as well). @@ -1133,6 +1225,28 @@ The `coordinates` and `displacements` transformations are not invertible in gene but implementations MAY approximate their inverses. ``` +:::{table} CoordinateTransformation variant: Coordinates +(object-coordinatetransformation-coordinates)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"coordinates"` | Discriminator for the Coordinates variant. | +| `path` | MUST | string | Path to the coordinate Zarr array. | +| `interpolation` | MAY | string | Type of interpolation used between coordinate values. | + +::: + +:::{table} CoordinateTransformation variant: Displacements +(object-coordinatetransformation-displacements)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"displacements"` | Discriminator for the Displacements variant. | +| `path` | MUST | string | Path to the displacement Zarr array. | +| `interpolation` | MAY | string | Type of interpolation used between displacement values. | + +::: + **Array Structure** The array containing the coordinates or displacements MUST: @@ -1250,6 +1364,27 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t ##### byDimension (byDimension-md)= +:::{table} CoordinateTransformation variant: ByDimension +(object-coordinatetransformation-bydimension)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"byDimension"` | Discriminator for the ByDimension variant. | +| `transformations` | MUST | array of [SubTransformation](#object-subtransformation) | Transformations to apply to subsets of coordinate axes. | + +::: + +:::{table} Object: SubTransformation +(object-subtransformation)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `inputAxes` | MUST | array of unsigned integer | Which axes of the input coordinate this subtransformation applies to. | +| `outputAxes` | MUST | array of unsigned integer | Which axes of the output coordinate this subtransformation produces. | +| `transformation` | MUST | [CoordinateTransformation](#object-coordinate-transformation) object | Transformation to apply; SHOULD omit `input`/`output`. | + +::: + `byDimension` transformations build a high dimensional transformation using lower dimensional transformations on subsets of dimensions. @@ -1310,6 +1445,17 @@ This transformation is invalid because the output axis `[1]` appears in more tha ##### bijection (bijection-md)= +:::{table} CoordinateTransformation variant: Bijection +(object-coordinatetransformation-bijection)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"bijection"` | Discriminator for the Bijection variant. | +| `forward` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the forward direction; SHOULD omit `input`/`output`. | +| `inverse` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the inverse direction; SHOULD omit `input`/`output`. | + +::: + A bijection transformation is an invertible transformation in which both the `forward` and `inverse` transformations are explicitly defined. Each direction SHOULD be a transformation type that is not closed-form invertible. From 0f4acabbf4870f7be8e8029ffe43ff4a0baa7cc4 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:08:11 +0100 Subject: [PATCH 56/79] multiscales tables --- index.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/index.md b/index.md index 3034e2a4..f95b16b8 100644 --- a/index.md +++ b/index.md @@ -1502,14 +1502,29 @@ resolutions. `multiscales` contains an array of objects where each entry describes a multiscale image. Each object provides the following fields: -| Field | Type | Required | Description | -| --- | --- | --- | --- | -| `coordinateSystems` | JSON array of objects | yes | [Coordinate system metadata](#coordinate-systems-md) for the multiscale image. | -| `datasets` | JSON array of objects | yes | Metadata about arrays storing the individual resolution levels. | -| `coordinateTransformations` | JSON array of objects | no | Metadata about transformations that are applied to all resolution levels in the same manner. | -| `name` | string | no | Name of the multiscale image. | -| `type` | string | no | Downsampling method used to generate the multiscale image. | -| `metadata` | JSON object | no | Additional metadata about the downscaling method. | +:::{table} Object: Multiscale +(object-multiscale)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `coordinateSystems` | MUST | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems for this multiscale. | +| `datasets` | MUST | array of [Dataset](#object-dataset) | Metadata about arrays storing individual resolution levels. | +| `coordinateTransformations` | MAY | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations applied to all resolution levels. | +| `name` | MAY | string | Name of the multiscale image. | +| `type` | MAY | string | Name of the downsampling method used to generate lower scales. | +| `metadata` | MAY | object | Additional metadata about the downscaling method. | + +::: + +:::{table} Object: Dataset +(object-dataset)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `path` | MUST | string | Path to the Zarr array containing image data for this scale level. | +| `coordinateTransformations` | MUST | [CoordinateTransformation](#object-coordinatetransformation) | Transformation from the image voxel indices to a known coordinate system. | + +::: **`coordinateSystems`** : The `coordinateSystems` field is a JSON array containing [coordinate system metadata](#coordinate-systems-md) From 485d7eef75411914096d8c81639fbd548a5bff08 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:08:42 +0100 Subject: [PATCH 57/79] label tables --- index.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/index.md b/index.md index f95b16b8..e427bd4b 100644 --- a/index.md +++ b/index.md @@ -1755,6 +1755,17 @@ All label images SHOULD be listed within this metadata file. The `zarr.json` file for the label image MUST implement the multiscales specification. Within the `multiscales` object, the JSON array associated with the `datasets` key MUST have the same number of entries (scale levels) as the original unlabeled image. +:::{table} Object: ImageLabel +(object-imagelabel)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `colors` | SHOULD | array of [LabelColor](#object-labelcolor) | Color information associated with each label value. | +| `properties` | MAY | array of [LabelProperties](#object-labelproperties) | Arbitrary properties associated with each label value. | +| `source` | MAY | [Source](#object-source) | Information about the "raw" image labelled by this label image. | + +::: + In addition to the `multiscales` key, the OME-Zarr Metadata in this image-level `zarr.json` file SHOULD contain another key, `image-label`, whose value is also a JSON object. The `image-label` object stores information about the display colors, source image, @@ -1762,6 +1773,17 @@ and optionally, further arbitrary properties of the label image. That `image-label` object SHOULD contain a `colors` key, whose value MUST be a JSON array describing color information for the unique label values. +:::{table} Object: LabelColor +(object-labelcolor)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `label-value` | MUST | integer | Value of the label. | +| `rgba` | MAY | array of 4 integers in `[0,256)` | Red, green, blue, alpha (opacity) values as unsigned 8-bit integers. | +| ... | MAY | any | Additional keys are allowed. | + +::: + Conforming readers SHOULD display labels using the colors specified by the `colors` JSON array, as follows. This array contains one JSON object for each unique custom label. Each of these objects MUST contain the `label-value` key, whose value MUST be the integer corresponding to a particular label. @@ -1773,6 +1795,16 @@ Additional keys under `colors` are allowed. Next, the `image-label` object MAY contain the following keys: a `properties` key, and a `source` key. +:::{table} Object: LabelProperties +(object-labelproperties)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `label-value` | MUST | integer | Value of the label. | +| ... | MAY | any | Additional keys are allowed. | + +::: + Like the `colors` key, the value of the `properties` key MUST be an array of JSON objects describing the set of unique possible pixel values. Each object in the `properties` array MUST contain the `label-value` key, whose value again MUST be an integer specifying the pixel value for that label. @@ -1780,6 +1812,15 @@ Additionally, an arbitrary number of key-value pairs MAY be present for each lab denoting arbitrary metadata associated with that label. Label-value objects within the `properties` array do not need to have the same keys. +:::{table} Object: Source +(object-source)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `image` | MAY | string, default `"../.."` | Path to the OME-Zarr node containing the "raw" multiscale image. | + +::: + The value of the `source` key MUST be a JSON object containing information about the original image from which the label image derives. This object MAY include a key `image`, whose value MUST be a string specifying the relative path to a Zarr image group. The default value is `../../` since most labeled images are stored in a "labels" group that is nested within the original image group. From f5db8e529e570b9a9de8298cce1c772160fa8cd1 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:34:48 +0100 Subject: [PATCH 58/79] plate tables --- index.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/index.md b/index.md index e427bd4b..a5891af3 100644 --- a/index.md +++ b/index.md @@ -1888,9 +1888,37 @@ Pixels with a 1 in the Zarr array, which correspond to cellular space, will be d ### "plate" metadata (plate-md)= +:::{table} Object: Plate +(object-plate)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `acquisitions` | MAY | array of [Acquisition](#object-acquisition) | Acquisitions for a given plate to which wells can refer. | +| `columns` | MUST | array of [Column](#object-column) | Details about the plate columns. | +| `rows` | MUST | array of [Row](#object-row) | Details about the plate rows. | +| `field_count` | SHOULD | unsigned integer | Maximum fields of view across all wells. | +| `name` | SHOULD | string | Name of the plate. | +| `wells` | MUST | array of [PlateWell](#object-platewell) | Details about the plate wells. | + +::: + For high-content screening datasets, the plate layout can be found under the custom attributes of the plate group under the `plate` key in the group-level metadata. +:::{table} Object: Acquisition +(object-acquisition)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `id` | MUST | unsigned integer | Unique within the plate, to which wells can refer. | +| `name` | SHOULD | string | Name of the acquisition. | +| `maximumfieldcount` | SHOULD | unsigned integer | Maximum number of fields of view for the acquisition. | +| `description` | MAY | string | Free-text details about the acquisition. | +| `starttime` | MAY | integer | Epoch timestamp specifying the start of the acquisition. | +| `endtime` | MAY | integer | Epoch timestamp specifying the end of the acquisition. | + +::: + The `plate` object MAY contain an `acquisitions` key whose value MUST be an array of JSON objects defining the acquisitions for a given plate to which wells can refer to. Each acquisition object MUST contain an `id` key @@ -1905,6 +1933,15 @@ whose value MUST be a string specifying a description for the acquisition. Each acquisition object MAY contain a `starttime` and/or `endtime` key whose values MUST be integer epoch timestamps specifying the start and/or end timestamp of the acquisition. +:::{table} Object: Column +(object-column)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MUST | string | Column name. | + +::: + The `plate` object MUST contain a `columns` key whose value MUST be an array of JSON objects defining the columns of the plate. Each column object defines the properties of the column at the index of the object in the array. @@ -1923,6 +1960,15 @@ whose value MUST be a positive integer defining the maximum number of fields per The `plate` object SHOULD contain a `name` key whose value MUST be a string defining the name of the plate. + :::{table} Object: Row + (object-row)= + + | key | requirement | type | description | + | --- | ----------- | ---- | ----------- | + | `name` | MUST | string | Row name. | + + ::: + The `plate` object MUST contain a `rows` key whose value MUST be an array of JSON objects defining the rows of the plate. Each row object defines the properties of the row at the index of the object in the array. @@ -1935,6 +1981,17 @@ and MUST NOT be a duplicate of any other `name` in the `rows` array. Care SHOULD be taken to avoid collisions on case-insensitive filesystems (e.g. avoid using both `Aa` and `aA`). +:::{table} Object: PlateWell +(object-platewell)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `path` | MUST | string | Path to the Zarr group of the well as `"rowName/columnName"`. | +| `rowIndex` | MUST | unsigned integer | Index into the plate's `rows` array. | +| `columnIndex` | MUST | unsigned integer | Index into the plate's `columns` array. | + +::: + The `plate` object MUST contain a `wells` key whose value MUST be a list of JSON objects defining the wells of the plate. Each well object MUST contain a `path` key From 5998a610deb54cf71dfdc754b40e45f8f55378d1 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:35:00 +0100 Subject: [PATCH 59/79] well table --- index.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/index.md b/index.md index a5891af3..b72c8cd4 100644 --- a/index.md +++ b/index.md @@ -2030,6 +2030,25 @@ containing one field of view per acquisition. For high-content screening datasets, the metadata about all fields of views under a given well can be found under the `well` key in the attributes of the well group. +:::{table} Object: Well +(object-well)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `images` | MUST | array of [FieldOfView](#object-fieldofview) | Fields of view of the well. | + +::: + +:::{table} Object: FieldOfView +(object-fieldofview)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `path` | MUST | string | Path to the Zarr group of the field of view. | +| `acquisition` | MUST if more than one acquisition is defined by the plate | unsigned integer | ID of an acquisition defined in the plate. | + +::: + The `well` object MUST contain an `images` key whose value MUST be an array of JSON objects specifying all fields of views for a given well. Each image object MUST contain a `path` key From 8f994e5bbd4a2b666e764597070ecb87f8b2ec9e Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 2 Sep 2026 20:35:15 +0100 Subject: [PATCH 60/79] scene table --- index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/index.md b/index.md index b72c8cd4..2545e3b6 100644 --- a/index.md +++ b/index.md @@ -2085,6 +2085,16 @@ The first field is part of the first acquisition, and the second field is part o For images that share a spatial relationship, the `scene` metadata layout can be used to describe the relationship between images. +:::{table} Object: Scene +(object-scene)= + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `coordinateTransformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations between coordinate systems. | +| `coordinateSystems` | MAY | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems applicable to multiple images. | + +::: + The `scene` object MUST contain the field `coordinateTransformations`, whose value MUST be an array of valid [transformations](#trafo-types-md). It MAY contain the field `coordinateSystems`, From a92c76a90b4a874297f68a9ecf82f4270d973866 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Thu, 3 Sep 2026 10:09:52 +0100 Subject: [PATCH 61/79] Rework table referencing --- index.md | 116 +++++++++++++++++++++++++++---------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/index.md b/index.md index 2545e3b6..0df797d2 100644 --- a/index.md +++ b/index.md @@ -199,12 +199,12 @@ object that MUST contain a `version` key, the value of which MUST be a string sp (coordinate-systems-md)= :::{table} Object: CoordinateSystem -(object-coordinatesystem)= +:label: object:coordinatesystem | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `name` | MUST | string, non-empty | Used to identify the coordinate system. | -| `axes` | MUST | array of [Axis](#object-axis) | Information about each array dimension. | +| `axes` | MUST | array of [Axis](#object:axis) | Information about each array dimension. | ::: @@ -249,7 +249,7 @@ See the [example below](#spec:example:coordinate_transformation_scale). (axes-md)= :::{table} Object: Axis -(object-axis)= +:label: object:axis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -258,7 +258,7 @@ See the [example below](#spec:example:coordinate_transformation_scale). | `discrete` | MAY | boolean, default `false` | Whether this axis should not be interpolated. | | `unit` | SHOULD | string | See below for unit types. | | `longName` | MAY | string | Description of an axis and its properties. | -| `orientation` | MAY | [Orientation](#object-orientation-anatomical) object | Used when an axis aligns with a canonical orientation of the sample. | +| `orientation` | MAY | [Orientation](#object:orientation:anatomical) object | Used when an axis aligns with a canonical orientation of the sample. | ::: @@ -296,12 +296,12 @@ The length of "axes" MUST be equal to the number of dimensions of the arrays tha (spec:orientation-values)= :::{table} Orientation variant: Anatomical -(object-orientation-anatomical)= +:label: object:orientation:anatomical | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"anatomical"` | Discriminator for the Anatomical variant. | -| `orientation` | MUST | [Anatomical Orientation](#enum-anatomical-orientation) enum | Known orientation type. | +| `orientation` | MUST | [Anatomical Orientation](#enum:anatomicalorientation) enum | Known orientation type. | ::: @@ -310,8 +310,8 @@ indicated with the "orientation" field, which must have "type" "anatomical" (with further types to be added to the specification or as extensions in the future), and one of the values detailed below: -:::{table} Enum: Anatomical Orientation -(enum-anatomical-orientation)= +:::{table} Enum: AnatomicalOrientation +(enum:anatomicalorientation)= | value | description | | ----- | ----------- | @@ -479,13 +479,13 @@ This means they represent functions from *points* in the input space to *points* A transform is a JSON object with the following fields: :::{table} Object: CoordinateTransformation -(object-coordinatetransformation)= +:label: object:coordinatetransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `name` | MAY | string | A unique name for this transformation. | -| `input` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The input coordinate system for this transformation. | -| `output` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The output coordinate system for this transformation. | +| `input` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object:coordinatesystemreference) object | The input coordinate system for this transformation. | +| `output` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object:coordinatesystemreference) object | The output coordinate system for this transformation. | | `type` | MUST | string | Discriminator for CoordinateTransformation variants. | | ... | MAY | any | Additional fields are strictly determined by the `type` discriminator. | @@ -514,7 +514,7 @@ The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUS The `input` and `output` fields are objects structured as follows: :::{table} Object: CoordinateSystemReference -(object-coordinatesystemreference)= +:label: object:coordinatesystemreference | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -776,7 +776,7 @@ otherwise it is given by the length of `axes` for the coordinate system with the (identity-md)= :::{table} CoordinateTransformation variant: Identity -(object-coordinatetransformation-identity)= +:label: object:coordinatetransformation:identity | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -808,7 +808,7 @@ y = j (mapAxis-md)= :::{table} CoordinateTransformation variant: MapAxis -(object-coordinatetransformation-mapaxis)= +:label: object:coordinatetransformation:mapaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -857,7 +857,7 @@ y = i (projectAxis-md)= :::{table} CoordinateTransformation variant: ProjectAxis -(object-coordinatetransformation-projectaxis)= +:label: object:coordinatetransformation:projectaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -927,7 +927,7 @@ This is useful for example when projecting a 3D CYX image to a 2D YX image by dr (translation-md)= :::{table} CoordinateTransformation variant: Translation -(object-coordinatetransformation-translation)= +:label: object:coordinatetransformation:translation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -964,7 +964,7 @@ y = j - 1.42 (scale-md)= :::{table} CoordinateTransformation variant: Scale -(object-coordinatetransformation-scale)= +:label: object:coordinatetransformation:scale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1014,7 +1014,7 @@ these axes are typically not transformed, but must be represented in the scale p (affine-md)= :::{table} CoordinateTransformation variant: Affine -(object-coordinatetransformation-affine)= +:label: object:coordinatetransformation:affine | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1113,7 +1113,7 @@ these axes are typically not transformed, but must be represented in the transfo (rotation-md)= :::{table} CoordinateTransformation variant: Rotation -(object-coordinatetransformation-rotation)= +:label: object:coordinatetransformation:rotation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1159,12 +1159,12 @@ y = 1*i + 0*j (sequence-md)= :::{table} CoordinateTransformation variant: Sequence -(object-coordinatetransformation-sequence)= +:label: object:coordinatetransformation:sequence | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"sequence"` | Discriminator for the Sequence variant. | -| `transformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations to apply in sequence; SHOULD omit `input`/`output` | +| `transformations` | MUST | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations to apply in sequence; SHOULD omit `input`/`output` | ::: @@ -1226,7 +1226,7 @@ but implementations MAY approximate their inverses. ``` :::{table} CoordinateTransformation variant: Coordinates -(object-coordinatetransformation-coordinates)= +:label: object:coordinatetransformation:coordinates | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1237,7 +1237,7 @@ but implementations MAY approximate their inverses. ::: :::{table} CoordinateTransformation variant: Displacements -(object-coordinatetransformation-displacements)= +:label: object:coordinatetransformation:displacements | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1365,23 +1365,23 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t (byDimension-md)= :::{table} CoordinateTransformation variant: ByDimension -(object-coordinatetransformation-bydimension)= +:label: object:coordinatetransformation:bydimension | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"byDimension"` | Discriminator for the ByDimension variant. | -| `transformations` | MUST | array of [SubTransformation](#object-subtransformation) | Transformations to apply to subsets of coordinate axes. | +| `transformations` | MUST | array of [SubTransformation](#object:subtransformation) | Transformations to apply to subsets of coordinate axes. | ::: :::{table} Object: SubTransformation -(object-subtransformation)= +:label: object:subtransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `inputAxes` | MUST | array of unsigned integer | Which axes of the input coordinate this subtransformation applies to. | | `outputAxes` | MUST | array of unsigned integer | Which axes of the output coordinate this subtransformation produces. | -| `transformation` | MUST | [CoordinateTransformation](#object-coordinate-transformation) object | Transformation to apply; SHOULD omit `input`/`output`. | +| `transformation` | MUST | [CoordinateTransformation](#object:coordinate:transformation) object | Transformation to apply; SHOULD omit `input`/`output`. | ::: @@ -1446,13 +1446,13 @@ This transformation is invalid because the output axis `[1]` appears in more tha (bijection-md)= :::{table} CoordinateTransformation variant: Bijection -(object-coordinatetransformation-bijection)= +:label: object:coordinatetransformation:bijection | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"bijection"` | Discriminator for the Bijection variant. | -| `forward` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the forward direction; SHOULD omit `input`/`output`. | -| `inverse` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the inverse direction; SHOULD omit `input`/`output`. | +| `forward` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply in the forward direction; SHOULD omit `input`/`output`. | +| `inverse` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply in the inverse direction; SHOULD omit `input`/`output`. | ::: @@ -1503,13 +1503,13 @@ resolutions. Each object provides the following fields: :::{table} Object: Multiscale -(object-multiscale)= +:label: object:multiscale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `coordinateSystems` | MUST | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems for this multiscale. | -| `datasets` | MUST | array of [Dataset](#object-dataset) | Metadata about arrays storing individual resolution levels. | -| `coordinateTransformations` | MAY | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations applied to all resolution levels. | +| `coordinateSystems` | MUST | array of [CoordinateSystem](#object:coordinatesystem) | Coordinate systems for this multiscale. | +| `datasets` | MUST | array of [Dataset](#object:dataset) | Metadata about arrays storing individual resolution levels. | +| `coordinateTransformations` | MAY | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations applied to all resolution levels. | | `name` | MAY | string | Name of the multiscale image. | | `type` | MAY | string | Name of the downsampling method used to generate lower scales. | | `metadata` | MAY | object | Additional metadata about the downscaling method. | @@ -1517,12 +1517,12 @@ Each object provides the following fields: ::: :::{table} Object: Dataset -(object-dataset)= +:label: object:dataset | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `path` | MUST | string | Path to the Zarr array containing image data for this scale level. | -| `coordinateTransformations` | MUST | [CoordinateTransformation](#object-coordinatetransformation) | Transformation from the image voxel indices to a known coordinate system. | +| `coordinateTransformations` | MUST | [CoordinateTransformation](#object:coordinatetransformation) | Transformation from the image voxel indices to a known coordinate system. | ::: @@ -1756,13 +1756,13 @@ The `zarr.json` file for the label image MUST implement the multiscales specific Within the `multiscales` object, the JSON array associated with the `datasets` key MUST have the same number of entries (scale levels) as the original unlabeled image. :::{table} Object: ImageLabel -(object-imagelabel)= +:label: object:imagelabel | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `colors` | SHOULD | array of [LabelColor](#object-labelcolor) | Color information associated with each label value. | -| `properties` | MAY | array of [LabelProperties](#object-labelproperties) | Arbitrary properties associated with each label value. | -| `source` | MAY | [Source](#object-source) | Information about the "raw" image labelled by this label image. | +| `colors` | SHOULD | array of [LabelColor](#object:labelcolor) | Color information associated with each label value. | +| `properties` | MAY | array of [LabelProperties](#object:labelproperties) | Arbitrary properties associated with each label value. | +| `source` | MAY | [Source](#object:source) | Information about the "raw" image labelled by this label image. | ::: @@ -1774,7 +1774,7 @@ That `image-label` object SHOULD contain a `colors` key, whose value MUST be a JSON array describing color information for the unique label values. :::{table} Object: LabelColor -(object-labelcolor)= +:label: object:labelcolor | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1796,7 +1796,7 @@ Additional keys under `colors` are allowed. Next, the `image-label` object MAY contain the following keys: a `properties` key, and a `source` key. :::{table} Object: LabelProperties -(object-labelproperties)= +:label: object:labelproperties | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1813,7 +1813,7 @@ denoting arbitrary metadata associated with that label. Label-value objects within the `properties` array do not need to have the same keys. :::{table} Object: Source -(object-source)= +:label: object:source | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1889,16 +1889,16 @@ Pixels with a 1 in the Zarr array, which correspond to cellular space, will be d (plate-md)= :::{table} Object: Plate -(object-plate)= +:label: object:plate | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `acquisitions` | MAY | array of [Acquisition](#object-acquisition) | Acquisitions for a given plate to which wells can refer. | -| `columns` | MUST | array of [Column](#object-column) | Details about the plate columns. | -| `rows` | MUST | array of [Row](#object-row) | Details about the plate rows. | +| `acquisitions` | MAY | array of [Acquisition](#object:acquisition) | Acquisitions for a given plate to which wells can refer. | +| `columns` | MUST | array of [Column](#object:column) | Details about the plate columns. | +| `rows` | MUST | array of [Row](#object:row) | Details about the plate rows. | | `field_count` | SHOULD | unsigned integer | Maximum fields of view across all wells. | | `name` | SHOULD | string | Name of the plate. | -| `wells` | MUST | array of [PlateWell](#object-platewell) | Details about the plate wells. | +| `wells` | MUST | array of [PlateWell](#object:platewell) | Details about the plate wells. | ::: @@ -1906,7 +1906,7 @@ For high-content screening datasets, the plate layout can be found under the custom attributes of the plate group under the `plate` key in the group-level metadata. :::{table} Object: Acquisition -(object-acquisition)= +:label: object:acquisition | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1934,7 +1934,7 @@ Each acquisition object MAY contain a `starttime` and/or `endtime` key whose values MUST be integer epoch timestamps specifying the start and/or end timestamp of the acquisition. :::{table} Object: Column -(object-column)= +:label: object:column | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1961,7 +1961,7 @@ The `plate` object SHOULD contain a `name` key whose value MUST be a string defining the name of the plate. :::{table} Object: Row - (object-row)= + :label: object:row | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1982,7 +1982,7 @@ Care SHOULD be taken to avoid collisions on case-insensitive filesystems (e.g. avoid using both `Aa` and `aA`). :::{table} Object: PlateWell -(object-platewell)= +:label: object:platewell | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2031,16 +2031,16 @@ For high-content screening datasets, the metadata about all fields of views under a given well can be found under the `well` key in the attributes of the well group. :::{table} Object: Well -(object-well)= +:label: object:well | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `images` | MUST | array of [FieldOfView](#object-fieldofview) | Fields of view of the well. | +| `images` | MUST | array of [FieldOfView](#object:fieldofview) | Fields of view of the well. | ::: :::{table} Object: FieldOfView -(object-fieldofview)= +:label: object:fieldofview | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2086,12 +2086,12 @@ For images that share a spatial relationship, the `scene` metadata layout can be used to describe the relationship between images. :::{table} Object: Scene -(object-scene)= +:label: object:scene | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `coordinateTransformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations between coordinate systems. | -| `coordinateSystems` | MAY | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems applicable to multiple images. | +| `coordinateTransformations` | MUST | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations between coordinate systems. | +| `coordinateSystems` | MAY | array of [CoordinateSystem](#object:coordinatesystem) | Coordinate systems applicable to multiple images. | ::: From 953d9c2ac99bd38e5ce8af46b1a5925f0d76c4fd Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Fri, 4 Sep 2026 13:46:57 +0100 Subject: [PATCH 62/79] rework referencing --- contribute.md | 30 ++++++++-- index.md | 137 +++++++++++++++++++++++---------------------- version_history.md | 3 +- 3 files changed, 95 insertions(+), 75 deletions(-) diff --git a/contribute.md b/contribute.md index 46be1b59..5cd4e5d8 100644 --- a/contribute.md +++ b/contribute.md @@ -96,19 +96,39 @@ MyST allows a number of ways to reference and cross-reference inside this text and across several of the pages in this repo. For an overview of supported referencing syntax, see the [MyST doc pages](https://mystmd.org/guide/cross-references). -It is recommended to use the following syntax in this document for consistency: +It is recommended to use the following syntax for references: ```markdown -anchor: (your-reference-name)= -reference: [This is a reference](#your-reference-name) +[This is the visible text](#your-reference-name) +``` + +The syntax for defining anchors/ targets differs by context. +Use `(your-reference)=` on the line before an element like a section header to set the target for that element. +Use the `:name: your-reference` option inside a directive (like a `{hint}`, `{table}`, or `{note}`) +to define a reference to the whole directive, +which allows smarter hover previews. + +```markdown +(version0.9:some-section)= +## Some section + +:::{note} +:name: some-note + +The content of a note. +::: + +## Another section + +See the [note](#some-note) in the [previous section](#some-section). ``` For cross-referencing in the spec document, make sure to prepend the reference anchor with `versionX` like so: ```markdown -## Some header (version0.9:some-header)= +## Some header ``` Otherwise, the same anchors may not be possible to resolve @@ -138,7 +158,7 @@ This is a citation {cite:t}`citation_key`. where `citation_key` is the key of the bibtex entry in the `references.bib` file. -#### Json examples +#### JSON examples We suggest using [dropdowns](https://mystmd.org/guide/dropdowns-cards-and-tabs) for example code and other highlighting. For examples, please use the following syntax to wrap your examples: diff --git a/index.md b/index.md index 0df797d2..0860ce58 100644 --- a/index.md +++ b/index.md @@ -137,8 +137,8 @@ A well group SHOULD NOT be present if there are no images in the well. └── ... # Other rows ``` -### Scene (scene-format)= +### Scene The following specification describes the hierarchy of Zarr groups for a scene dataset. The group above the images defines a scene, which is a collection of images that share a spatial relationship with each other (see [coordinate transformations metadata](#coord-trafo-md)). @@ -172,8 +172,8 @@ store.zarr # One scene dataset └── labels # Labels (optional) -## OME-Zarr Metadata (metadata)= +## OME-Zarr Metadata The "OME-Zarr Metadata" contains metadata keys as specified below for discovering certain types of data, especially images. @@ -195,11 +195,11 @@ object that MUST contain a `version` key, the value of which MUST be a string sp } ``` -### "coordinateSystems" metadata (coordinate-systems-md)= +### "coordinateSystems" metadata :::{table} Object: CoordinateSystem -:label: object:coordinatesystem +:name: object:coordinatesystem | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -245,11 +245,11 @@ SHOULD ensure that they are in the same coordinate system (same name and locatio or can be transformed to the same coordinate system before doing analysis. See the [example below](#spec:example:coordinate_transformation_scale). -#### "axes" metadata (axes-md)= +#### "axes" metadata :::{table} Object: Axis -:label: object:axis +:name: object:axis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -293,10 +293,10 @@ The values in the `name` fields MUST be unique within the same coordinate system The length of "axes" MUST be equal to the number of dimensions of the arrays that contain the image data. ```{note} -(spec:orientation-values)= +:name: spec:orientation-values :::{table} Orientation variant: Anatomical -:label: object:orientation:anatomical +:name: object:orientation:anatomical | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -311,7 +311,7 @@ indicated with the "orientation" field, which must have "type" extensions in the future), and one of the values detailed below: :::{table} Enum: AnatomicalOrientation -(enum:anatomicalorientation)= +:name: enum:anatomicalorientation | value | description | | ----- | ----------- | @@ -386,9 +386,9 @@ The following conventions apply in this specification: For a more formal and in-depth definition, see chapter 4 and figure 4.1 of the [ITK Software Guide](https://itk.org/ItkSoftwareGuide.pdf). +(bf2raw)= ### "bioformats2raw.layout" metadata (transitional) -(bf2raw)= [=Transitional=] `bioformats2raw.layout` metadata identifies a group which implicitly describes a series of images. The need for the collection stems from the common "multi-image file" scenario in microscopy. @@ -398,9 +398,9 @@ In order to capture that information within an OME-Zarr dataset, `bioformats2raw The bioformats2raw layout has been added to v0.4 as a transitional specification to specify filesets that already exist in the wild. An upcoming NGFF specification will replace this layout with explicit metadata. +(bf2raw-layout)= #### Layout -(bf2raw-layout)= Typical Zarr layout produced by running `bioformats2raw` on a fileset that contains more than one image (series > 1): @@ -415,8 +415,8 @@ series.ome.zarr # One converted fileset from bioformats2raw └── ... ``` -#### bf2raw-attributes (bf2raw-attributes-md)= +#### bf2raw-attributes The OME-Zarr Metadata in the top-level `zarr.json` file must contain the `bioformats2raw.layout` key: @@ -438,8 +438,8 @@ The OME-Zarr Metadata in the `zarr.json` file within the OME group may contain t :language: json ``` -#### Details (bf2raw-details)= +#### Details Conforming groups: @@ -467,8 +467,8 @@ Conforming readers: - MAY choose to show all images within the collection or offer the user a choice of images, as with HCS plates; - MAY ignore other groups or arrays under the root of the hierarchy. -### "coordinateTransformations" metadata (coord-trafo-md)= +### "coordinateTransformations" metadata `coordinateTransformations` describe the mapping between two coordinate systems (defined by [`coordinateSystems`](#coordinate-systems-md)). For example, to map an array's discrete coordinate system to its corresponding physical coordinates. @@ -479,7 +479,7 @@ This means they represent functions from *points* in the input space to *points* A transform is a JSON object with the following fields: :::{table} Object: CoordinateTransformation -:label: object:coordinatetransformation +:name: object:coordinatetransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -514,7 +514,7 @@ The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUS The `input` and `output` fields are objects structured as follows: :::{table} Object: CoordinateSystemReference -:label: object:coordinatesystemreference +:name: object:coordinatesystemreference | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -534,8 +534,8 @@ Conforming readers: - SHOULD be able to apply transformations to points; - SHOULD be able to apply transformations to images; -**Constraints** (coord-trafo-constraints)= +**Constraints** Coordinate transformations can be stored in multiple places to reflect different use cases. Depending on which, different constraints apply to the transformations, as described below: @@ -752,8 +752,8 @@ defines the mapping from the "[intrinsic](#spec:hint:multiscales-intrinsic-coord Another transformation (e.g. in a `scene`) could then use the "array" coordinate system as an input or output to define transformations in array units. ::: -#### Matrix transformations (matrix-trafo-md)= +#### Matrix transformations Two transformation types ([affine](#affine-md) and [rotation](#rotation-md)) are parametrized by matrices. Matrices are applied to column vectors that represent points in the input coordinate system. @@ -763,8 +763,8 @@ When stored as a 2D Zarr array, the first dimension indexes rows and the second (e.g., an array of `"shape":[3,4]` has 3 rows and 4 columns). When stored as a 2D json array, the inner array contains rows (e.g. `[[1,2,3], [4,5,6]]` has 2 rows and 3 columns). -#### Transformation types (trafo-types-md)= +#### Transformation types Input and output dimensionality may be determined by the coordinate system referred to by the `input` and `output` fields, respectively. If the value of `input` is a path to an array, its shape gives the input dimension, @@ -772,11 +772,11 @@ otherwise it is given by the length of `axes` for the coordinate system with the If the value of `output` is an array, its shape gives the output dimension, otherwise it is given by the length of `axes` for the coordinate system with the name of the `output`. -##### identity (identity-md)= +##### identity :::{table} CoordinateTransformation variant: Identity -:label: object:coordinatetransformation:identity +:name: object:coordinatetransformation:identity | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -804,11 +804,11 @@ y = j ::: -##### mapAxis (mapAxis-md)= +##### mapAxis :::{table} CoordinateTransformation variant: MapAxis -:label: object:coordinatetransformation:mapaxis +:name: object:coordinatetransformation:mapaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -853,11 +853,11 @@ y = i ::: -##### projectAxis (projectAxis-md)= +##### projectAxis :::{table} CoordinateTransformation variant: ProjectAxis -:label: object:coordinatetransformation:projectaxis +:name: object:coordinatetransformation:projectaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -923,11 +923,11 @@ This is useful for example when projecting a 3D CYX image to a 2D YX image by dr ``` -##### translation (translation-md)= +##### translation :::{table} CoordinateTransformation variant: Translation -:label: object:coordinatetransformation:translation +:name: object:coordinatetransformation:translation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -960,11 +960,11 @@ y = j - 1.42 ``` ::: -##### scale (scale-md)= +##### scale :::{table} CoordinateTransformation variant: Scale -:label: object:coordinatetransformation:scale +:name: object:coordinatetransformation:scale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -984,8 +984,8 @@ in that case, `scale` transformations are invertible. : The scale parameters are stored as a JSON array of numbers. The array MUST have length `N`. -:::{dropdown} Example 1 (spec:example:coordinate_transformation_scale)= +:::{dropdown} Example 1 ```{literalinclude} examples/transformations/scale.json :language: json ``` @@ -1010,11 +1010,11 @@ these axes are typically not transformed, but must be represented in the scale p ``` ::: -##### affine (affine-md)= +##### affine :::{table} CoordinateTransformation variant: Affine -:label: object:coordinatetransformation:affine +:name: object:coordinatetransformation:affine | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1109,11 +1109,11 @@ these axes are typically not transformed, but must be represented in the transfo ``` ::: -##### rotation (rotation-md)= +##### rotation :::{table} CoordinateTransformation variant: Rotation -:label: object:coordinatetransformation:rotation +:name: object:coordinatetransformation:rotation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1155,11 +1155,11 @@ y = 1*i + 0*j ``` ::: -##### sequence (sequence-md)= +##### sequence :::{table} CoordinateTransformation variant: Sequence -:label: object:coordinatetransformation:sequence +:name: object:coordinatetransformation:sequence | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1212,8 +1212,8 @@ y = (j + 0.9) * 3 and is invertible. ::: -##### coordinates and displacements (coordinates-displacements-md)= +##### coordinates and displacements `coordinates` and `displacements` transformations store a vector field of arbitrary sampling density in an ome-zarr [multiscale group](#multiscales-md), defining a mapping from an input coordinate system to an output coordinate system. @@ -1226,7 +1226,7 @@ but implementations MAY approximate their inverses. ``` :::{table} CoordinateTransformation variant: Coordinates -:label: object:coordinatetransformation:coordinates +:name: object:coordinatetransformation:coordinates | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1237,7 +1237,7 @@ but implementations MAY approximate their inverses. ::: :::{table} CoordinateTransformation variant: Displacements -:label: object:coordinatetransformation:displacements +:name: object:coordinatetransformation:displacements | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1361,11 +1361,11 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t ::: -##### byDimension (byDimension-md)= +##### byDimension :::{table} CoordinateTransformation variant: ByDimension -:label: object:coordinatetransformation:bydimension +:name: object:coordinatetransformation:bydimension | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1375,13 +1375,13 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t ::: :::{table} Object: SubTransformation -:label: object:subtransformation +:name: object:subtransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `inputAxes` | MUST | array of unsigned integer | Which axes of the input coordinate this subtransformation applies to. | | `outputAxes` | MUST | array of unsigned integer | Which axes of the output coordinate this subtransformation produces. | -| `transformation` | MUST | [CoordinateTransformation](#object:coordinate:transformation) object | Transformation to apply; SHOULD omit `input`/`output`. | +| `transformation` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply; SHOULD omit `input`/`output`. | ::: @@ -1442,11 +1442,11 @@ Another **invalid** `byDimension` transform: This transformation is invalid because the output axis `[1]` appears in more than one transformation in the `transformations` array. ::: -##### bijection (bijection-md)= +##### bijection :::{table} CoordinateTransformation variant: Bijection -:label: object:coordinatetransformation:bijection +:name: object:coordinatetransformation:bijection | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1491,8 +1491,8 @@ the input and output of the `forward` and `inverse` transformations are understo ``` ::: -### "multiscales" metadata (multiscales-md)= +### "multiscales" metadata Metadata about an image can be found under the `multiscales` key in the group-level OME-Zarr Metadata. Here, "image" refers to data stored in a Zarr Array representing image, @@ -1503,7 +1503,7 @@ resolutions. Each object provides the following fields: :::{table} Object: Multiscale -:label: object:multiscale +:name: object:multiscale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1517,7 +1517,7 @@ Each object provides the following fields: ::: :::{table} Object: Dataset -:label: object:dataset +:name: object:dataset | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1552,7 +1552,8 @@ Each object provides the following fields: ```{hint} -(spec:hint:multiscales-intrinsic-coordinate-system)= +:name: spec:hint:multiscales-intrinsic-coordinate-system + [Multiscale images](#multiscales-md) have an "intrinsic" coordinate system. It will be a representation of the image in its **native physical coordinate system** and can be used for viewing and processing unless a use case dictates otherwise. @@ -1672,8 +1673,8 @@ if not datasets: datasets = [x["path"] for x in multiscales[0]["datasets"]] ``` -### "omero" metadata (transitional) (omero-md)= +### "omero" metadata (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 (i.e., under `"ome" > "omero"`): @@ -1721,8 +1722,8 @@ Each object in `channels` is optional and MAY contain the following fields: - `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)= +### "labels" metadata In OME-Zarr, Zarr arrays representing pixel-annotation data are stored in a group called `labels`. Some applications--notably image segmentation--produce a new image that is in the same coordinate system as a corresponding multiscale image @@ -1756,7 +1757,7 @@ The `zarr.json` file for the label image MUST implement the multiscales specific Within the `multiscales` object, the JSON array associated with the `datasets` key MUST have the same number of entries (scale levels) as the original unlabeled image. :::{table} Object: ImageLabel -:label: object:imagelabel +:name: object:imagelabel | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1774,7 +1775,7 @@ That `image-label` object SHOULD contain a `colors` key, whose value MUST be a JSON array describing color information for the unique label values. :::{table} Object: LabelColor -:label: object:labelcolor +:name: object:labelcolor | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1796,7 +1797,7 @@ Additional keys under `colors` are allowed. Next, the `image-label` object MAY contain the following keys: a `properties` key, and a `source` key. :::{table} Object: LabelProperties -:label: object:labelproperties +:name: object:labelproperties | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1813,7 +1814,7 @@ denoting arbitrary metadata associated with that label. Label-value objects within the `properties` array do not need to have the same keys. :::{table} Object: Source -:label: object:source +:name: object:source | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1885,11 +1886,11 @@ Pixels with a 1 in the Zarr array, which correspond to cellular space, will be d ::: -### "plate" metadata (plate-md)= +### "plate" metadata :::{table} Object: Plate -:label: object:plate +:name: object:plate | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1906,7 +1907,7 @@ For high-content screening datasets, the plate layout can be found under the custom attributes of the plate group under the `plate` key in the group-level metadata. :::{table} Object: Acquisition -:label: object:acquisition +:name: object:acquisition | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1934,7 +1935,7 @@ Each acquisition object MAY contain a `starttime` and/or `endtime` key whose values MUST be integer epoch timestamps specifying the start and/or end timestamp of the acquisition. :::{table} Object: Column -:label: object:column +:name: object:column | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1961,7 +1962,7 @@ The `plate` object SHOULD contain a `name` key whose value MUST be a string defining the name of the plate. :::{table} Object: Row - :label: object:row + :name: object:row | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1982,7 +1983,7 @@ Care SHOULD be taken to avoid collisions on case-insensitive filesystems (e.g. avoid using both `Aa` and `aA`). :::{table} Object: PlateWell -:label: object:platewell +:name: object:platewell | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2024,14 +2025,14 @@ containing one field of view per acquisition. ``` ::: -### "well" metadata (well-md)= +### "well" metadata For high-content screening datasets, the metadata about all fields of views under a given well can be found under the `well` key in the attributes of the well group. :::{table} Object: Well -:label: object:well +:name: object:well | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2040,7 +2041,7 @@ the metadata about all fields of views under a given well can be found under the ::: :::{table} Object: FieldOfView -:label: object:fieldofview +:name: object:fieldofview | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2079,14 +2080,14 @@ The first field is part of the first acquisition, and the second field is part o ``` ::: -### "scene" metadata (scene-md)= +### "scene" metadata For images that share a spatial relationship, the `scene` metadata layout can be used to describe the relationship between images. :::{table} Object: Scene -:label: object:scene +:name: object:scene | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2246,15 +2247,15 @@ viewers may want to expose a choice for the user to select a coordinate system f ``` -## Specification naming style (naming-style)= +## Specification naming style Multi-word keys in this specification should use the `camelCase` style. NB: some parts of the specification don't obey this convention as they were added before this was adopted, but they should be updated in due course. -## Implementations (implementations-md)= +## Implementations See [Tools](https://ngff.openmicroscopy.org/tools/index.html). diff --git a/version_history.md b/version_history.md index 293d95c3..87e70a08 100644 --- a/version_history.md +++ b/version_history.md @@ -2,9 +2,8 @@ author: "" --- -# Version History - (ngff-spec:history)= +# Version History All notable changes to this project will be documented in this file. From a45422460f40526cfd067402f5fd550f46188500 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 11:09:40 +0100 Subject: [PATCH 63/79] Use only 1 type of anchor definition --- contribute.md | 6 +-- index.md | 128 +++++++++++++++++++++++++------------------------- 2 files changed, 65 insertions(+), 69 deletions(-) diff --git a/contribute.md b/contribute.md index 5cd4e5d8..c012b4e9 100644 --- a/contribute.md +++ b/contribute.md @@ -102,18 +102,14 @@ It is recommended to use the following syntax for references: [This is the visible text](#your-reference-name) ``` -The syntax for defining anchors/ targets differs by context. Use `(your-reference)=` on the line before an element like a section header to set the target for that element. -Use the `:name: your-reference` option inside a directive (like a `{hint}`, `{table}`, or `{note}`) -to define a reference to the whole directive, -which allows smarter hover previews. ```markdown (version0.9:some-section)= ## Some section +(version0.9:some-note)= :::{note} -:name: some-note The content of a note. ::: diff --git a/index.md b/index.md index 0860ce58..98e249e0 100644 --- a/index.md +++ b/index.md @@ -198,13 +198,13 @@ object that MUST contain a `version` key, the value of which MUST be a string sp (coordinate-systems-md)= ### "coordinateSystems" metadata +(object-coordinatesystem)= :::{table} Object: CoordinateSystem -:name: object:coordinatesystem | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `name` | MUST | string, non-empty | Used to identify the coordinate system. | -| `axes` | MUST | array of [Axis](#object:axis) | Information about each array dimension. | +| `axes` | MUST | array of [Axis](#object-axis) | Information about each array dimension. | ::: @@ -248,8 +248,8 @@ See the [example below](#spec:example:coordinate_transformation_scale). (axes-md)= #### "axes" metadata +(object-axis)= :::{table} Object: Axis -:name: object:axis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -258,7 +258,7 @@ See the [example below](#spec:example:coordinate_transformation_scale). | `discrete` | MAY | boolean, default `false` | Whether this axis should not be interpolated. | | `unit` | SHOULD | string | See below for unit types. | | `longName` | MAY | string | Description of an axis and its properties. | -| `orientation` | MAY | [Orientation](#object:orientation:anatomical) object | Used when an axis aligns with a canonical orientation of the sample. | +| `orientation` | MAY | [Orientation](#object-orientation-anatomical) object | Used when an axis aligns with a canonical orientation of the sample. | ::: @@ -292,16 +292,16 @@ where each object describes a dimension (axis) and: The values in the `name` fields MUST be unique within the same coordinate system. The length of "axes" MUST be equal to the number of dimensions of the arrays that contain the image data. +(spec:orientation-values)= ```{note} -:name: spec:orientation-values +(object-orientation-anatomical)= :::{table} Orientation variant: Anatomical -:name: object:orientation:anatomical | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"anatomical"` | Discriminator for the Anatomical variant. | -| `orientation` | MUST | [Anatomical Orientation](#enum:anatomicalorientation) enum | Known orientation type. | +| `orientation` | MUST | [Anatomical Orientation](#enum-anatomicalorientation) enum | Known orientation type. | ::: @@ -310,8 +310,8 @@ indicated with the "orientation" field, which must have "type" "anatomical" (with further types to be added to the specification or as extensions in the future), and one of the values detailed below: +(enum-anatomicalorientation)= :::{table} Enum: AnatomicalOrientation -:name: enum:anatomicalorientation | value | description | | ----- | ----------- | @@ -478,14 +478,14 @@ This means they represent functions from *points* in the input space to *points* A transform is a JSON object with the following fields: +(object-coordinatetransformation)= :::{table} Object: CoordinateTransformation -:name: object:coordinatetransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `name` | MAY | string | A unique name for this transformation. | -| `input` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object:coordinatesystemreference) object | The input coordinate system for this transformation. | -| `output` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object:coordinatesystemreference) object | The output coordinate system for this transformation. | +| `input` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The input coordinate system for this transformation. | +| `output` | MUST unless part of a wrapper transform | [CoordinateSystemReference](#object-coordinatesystemreference) object | The output coordinate system for this transformation. | | `type` | MUST | string | Discriminator for CoordinateTransformation variants. | | ... | MAY | any | Additional fields are strictly determined by the `type` discriminator. | @@ -513,8 +513,8 @@ The parameter values (e.g., `scale` for a [scale transformation](#scale-md)) MUS The `input` and `output` fields are objects structured as follows: +(object-coordinatesystemreference)= :::{table} Object: CoordinateSystemReference -:name: object:coordinatesystemreference | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -775,8 +775,8 @@ otherwise it is given by the length of `axes` for the coordinate system with the (identity-md)= ##### identity +(object-coordinatetransformation-identity)= :::{table} CoordinateTransformation variant: Identity -:name: object:coordinatetransformation:identity | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -807,8 +807,8 @@ y = j (mapAxis-md)= ##### mapAxis +(object-coordinatetransformation-mapaxis)= :::{table} CoordinateTransformation variant: MapAxis -:name: object:coordinatetransformation:mapaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -856,8 +856,8 @@ y = i (projectAxis-md)= ##### projectAxis +(object-coordinatetransformation-projectaxis)= :::{table} CoordinateTransformation variant: ProjectAxis -:name: object:coordinatetransformation:projectaxis | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -926,8 +926,8 @@ This is useful for example when projecting a 3D CYX image to a 2D YX image by dr (translation-md)= ##### translation +(object-coordinatetransformation-translation)= :::{table} CoordinateTransformation variant: Translation -:name: object:coordinatetransformation:translation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -963,8 +963,8 @@ y = j - 1.42 (scale-md)= ##### scale +(object-coordinatetransformation-scale)= :::{table} CoordinateTransformation variant: Scale -:name: object:coordinatetransformation:scale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1013,8 +1013,8 @@ these axes are typically not transformed, but must be represented in the scale p (affine-md)= ##### affine +(object-coordinatetransformation-affine)= :::{table} CoordinateTransformation variant: Affine -:name: object:coordinatetransformation:affine | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1112,8 +1112,8 @@ these axes are typically not transformed, but must be represented in the transfo (rotation-md)= ##### rotation +(object-coordinatetransformation-rotation)= :::{table} CoordinateTransformation variant: Rotation -:name: object:coordinatetransformation:rotation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1158,13 +1158,13 @@ y = 1*i + 0*j (sequence-md)= ##### sequence +(object-coordinatetransformation-sequence)= :::{table} CoordinateTransformation variant: Sequence -:name: object:coordinatetransformation:sequence | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"sequence"` | Discriminator for the Sequence variant. | -| `transformations` | MUST | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations to apply in sequence; SHOULD omit `input`/`output` | +| `transformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations to apply in sequence; SHOULD omit `input`/`output` | ::: @@ -1225,8 +1225,8 @@ The `coordinates` and `displacements` transformations are not invertible in gene but implementations MAY approximate their inverses. ``` +(object-coordinatetransformation-coordinates)= :::{table} CoordinateTransformation variant: Coordinates -:name: object:coordinatetransformation:coordinates | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1236,8 +1236,8 @@ but implementations MAY approximate their inverses. ::: +(object-coordinatetransformation-displacements)= :::{table} CoordinateTransformation variant: Displacements -:name: object:coordinatetransformation:displacements | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1364,24 +1364,24 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t (byDimension-md)= ##### byDimension +(object-coordinatetransformation-bydimension)= :::{table} CoordinateTransformation variant: ByDimension -:name: object:coordinatetransformation:bydimension | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"byDimension"` | Discriminator for the ByDimension variant. | -| `transformations` | MUST | array of [SubTransformation](#object:subtransformation) | Transformations to apply to subsets of coordinate axes. | +| `transformations` | MUST | array of [SubTransformation](#object-subtransformation) | Transformations to apply to subsets of coordinate axes. | ::: +(object-subtransformation)= :::{table} Object: SubTransformation -:name: object:subtransformation | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `inputAxes` | MUST | array of unsigned integer | Which axes of the input coordinate this subtransformation applies to. | | `outputAxes` | MUST | array of unsigned integer | Which axes of the output coordinate this subtransformation produces. | -| `transformation` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply; SHOULD omit `input`/`output`. | +| `transformation` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply; SHOULD omit `input`/`output`. | ::: @@ -1445,14 +1445,14 @@ This transformation is invalid because the output axis `[1]` appears in more tha (bijection-md)= ##### bijection +(object-coordinatetransformation-bijection)= :::{table} CoordinateTransformation variant: Bijection -:name: object:coordinatetransformation:bijection | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `type` | MUST | `"bijection"` | Discriminator for the Bijection variant. | -| `forward` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply in the forward direction; SHOULD omit `input`/`output`. | -| `inverse` | MUST | [CoordinateTransformation](#object:coordinatetransformation) object | Transformation to apply in the inverse direction; SHOULD omit `input`/`output`. | +| `forward` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the forward direction; SHOULD omit `input`/`output`. | +| `inverse` | MUST | [CoordinateTransformation](#object-coordinatetransformation) object | Transformation to apply in the inverse direction; SHOULD omit `input`/`output`. | ::: @@ -1502,27 +1502,27 @@ resolutions. `multiscales` contains an array of objects where each entry describes a multiscale image. Each object provides the following fields: +(object-multiscale)= :::{table} Object: Multiscale -:name: object:multiscale | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `coordinateSystems` | MUST | array of [CoordinateSystem](#object:coordinatesystem) | Coordinate systems for this multiscale. | -| `datasets` | MUST | array of [Dataset](#object:dataset) | Metadata about arrays storing individual resolution levels. | -| `coordinateTransformations` | MAY | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations applied to all resolution levels. | +| `coordinateSystems` | MUST | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems for this multiscale. | +| `datasets` | MUST | array of [Dataset](#object-dataset) | Metadata about arrays storing individual resolution levels. | +| `coordinateTransformations` | MAY | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations applied to all resolution levels. | | `name` | MAY | string | Name of the multiscale image. | | `type` | MAY | string | Name of the downsampling method used to generate lower scales. | | `metadata` | MAY | object | Additional metadata about the downscaling method. | ::: +(object-dataset)= :::{table} Object: Dataset -:name: object:dataset | key | requirement | type | description | | --- | ----------- | ---- | ----------- | | `path` | MUST | string | Path to the Zarr array containing image data for this scale level. | -| `coordinateTransformations` | MUST | [CoordinateTransformation](#object:coordinatetransformation) | Transformation from the image voxel indices to a known coordinate system. | +| `coordinateTransformations` | MUST | [CoordinateTransformation](#object-coordinatetransformation) | Transformation from the image voxel indices to a known coordinate system. | ::: @@ -1551,8 +1551,8 @@ Each object provides the following fields: within the array. +(spec:hint:multiscales-intrinsic-coordinate-system)= ```{hint} -:name: spec:hint:multiscales-intrinsic-coordinate-system [Multiscale images](#multiscales-md) have an "intrinsic" coordinate system. It will be a representation of the image in its **native physical coordinate system** and @@ -1756,14 +1756,14 @@ All label images SHOULD be listed within this metadata file. The `zarr.json` file for the label image MUST implement the multiscales specification. Within the `multiscales` object, the JSON array associated with the `datasets` key MUST have the same number of entries (scale levels) as the original unlabeled image. +(object-imagelabel)= :::{table} Object: ImageLabel -:name: object:imagelabel | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `colors` | SHOULD | array of [LabelColor](#object:labelcolor) | Color information associated with each label value. | -| `properties` | MAY | array of [LabelProperties](#object:labelproperties) | Arbitrary properties associated with each label value. | -| `source` | MAY | [Source](#object:source) | Information about the "raw" image labelled by this label image. | +| `colors` | SHOULD | array of [LabelColor](#object-labelcolor) | Color information associated with each label value. | +| `properties` | MAY | array of [LabelProperties](#object-labelproperties) | Arbitrary properties associated with each label value. | +| `source` | MAY | [Source](#object-source) | Information about the "raw" image labelled by this label image. | ::: @@ -1774,8 +1774,8 @@ and optionally, further arbitrary properties of the label image. That `image-label` object SHOULD contain a `colors` key, whose value MUST be a JSON array describing color information for the unique label values. +(object-labelcolor)= :::{table} Object: LabelColor -:name: object:labelcolor | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1796,8 +1796,8 @@ Additional keys under `colors` are allowed. Next, the `image-label` object MAY contain the following keys: a `properties` key, and a `source` key. +(object-labelproperties)= :::{table} Object: LabelProperties -:name: object:labelproperties | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1813,8 +1813,8 @@ Additionally, an arbitrary number of key-value pairs MAY be present for each lab denoting arbitrary metadata associated with that label. Label-value objects within the `properties` array do not need to have the same keys. +(object-source)= :::{table} Object: Source -:name: object:source | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1889,25 +1889,25 @@ Pixels with a 1 in the Zarr array, which correspond to cellular space, will be d (plate-md)= ### "plate" metadata +(object-plate)= :::{table} Object: Plate -:name: object:plate | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `acquisitions` | MAY | array of [Acquisition](#object:acquisition) | Acquisitions for a given plate to which wells can refer. | -| `columns` | MUST | array of [Column](#object:column) | Details about the plate columns. | -| `rows` | MUST | array of [Row](#object:row) | Details about the plate rows. | +| `acquisitions` | MAY | array of [Acquisition](#object-acquisition) | Acquisitions for a given plate to which wells can refer. | +| `columns` | MUST | array of [Column](#object-column) | Details about the plate columns. | +| `rows` | MUST | array of [Row](#object-row) | Details about the plate rows. | | `field_count` | SHOULD | unsigned integer | Maximum fields of view across all wells. | | `name` | SHOULD | string | Name of the plate. | -| `wells` | MUST | array of [PlateWell](#object:platewell) | Details about the plate wells. | +| `wells` | MUST | array of [PlateWell](#object-platewell) | Details about the plate wells. | ::: For high-content screening datasets, the plate layout can be found under the custom attributes of the plate group under the `plate` key in the group-level metadata. +(object-acquisition)= :::{table} Object: Acquisition -:name: object:acquisition | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1934,8 +1934,8 @@ whose value MUST be a string specifying a description for the acquisition. Each acquisition object MAY contain a `starttime` and/or `endtime` key whose values MUST be integer epoch timestamps specifying the start and/or end timestamp of the acquisition. +(object-column)= :::{table} Object: Column -:name: object:column | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -1961,14 +1961,14 @@ whose value MUST be a positive integer defining the maximum number of fields per The `plate` object SHOULD contain a `name` key whose value MUST be a string defining the name of the plate. - :::{table} Object: Row - :name: object:row +(object-row)= +:::{table} Object: Row - | key | requirement | type | description | - | --- | ----------- | ---- | ----------- | - | `name` | MUST | string | Row name. | +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `name` | MUST | string | Row name. | - ::: +::: The `plate` object MUST contain a `rows` key whose value MUST be an array of JSON objects defining the rows of the plate. @@ -1982,8 +1982,8 @@ and MUST NOT be a duplicate of any other `name` in the `rows` array. Care SHOULD be taken to avoid collisions on case-insensitive filesystems (e.g. avoid using both `Aa` and `aA`). +(object-platewell)= :::{table} Object: PlateWell -:name: object:platewell | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2031,17 +2031,17 @@ containing one field of view per acquisition. For high-content screening datasets, the metadata about all fields of views under a given well can be found under the `well` key in the attributes of the well group. +(object-well)= :::{table} Object: Well -:name: object:well | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `images` | MUST | array of [FieldOfView](#object:fieldofview) | Fields of view of the well. | +| `images` | MUST | array of [FieldOfView](#object-fieldofview) | Fields of view of the well. | ::: +(object-fieldofview)= :::{table} Object: FieldOfView -:name: object:fieldofview | key | requirement | type | description | | --- | ----------- | ---- | ----------- | @@ -2086,13 +2086,13 @@ The first field is part of the first acquisition, and the second field is part o For images that share a spatial relationship, the `scene` metadata layout can be used to describe the relationship between images. +(object-scene)= :::{table} Object: Scene -:name: object:scene | key | requirement | type | description | | --- | ----------- | ---- | ----------- | -| `coordinateTransformations` | MUST | array of [CoordinateTransformation](#object:coordinatetransformation) | Transformations between coordinate systems. | -| `coordinateSystems` | MAY | array of [CoordinateSystem](#object:coordinatesystem) | Coordinate systems applicable to multiple images. | +| `coordinateTransformations` | MUST | array of [CoordinateTransformation](#object-coordinatetransformation) | Transformations between coordinate systems. | +| `coordinateSystems` | MAY | array of [CoordinateSystem](#object-coordinatesystem) | Coordinate systems applicable to multiple images. | ::: From 13fea682eb4ca27253416ce8acd4cdf277eaaf33 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 16 Sep 2026 18:29:53 +0100 Subject: [PATCH 64/79] version bump script --- pyproject.toml | 3 +- scripts/bumpversion.py | 327 +++++++++++++++++++++++++++++++++++++++++ uv.lock | 36 +++-- 3 files changed, 351 insertions(+), 15 deletions(-) create mode 100755 scripts/bumpversion.py diff --git a/pyproject.toml b/pyproject.toml index 19a7f497..c0e43970 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,9 +17,10 @@ dependencies = [ test = ["pytest", "jsonschema"] lint = ["codespell", "prek"] dev = [ + "parver>=1.0.1.post0", "rust-just", { include-group = "test" }, - { include-group = "lint" } + { include-group = "lint" }, ] [tool.codespell] diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py new file mode 100755 index 00000000..fdff2e8a --- /dev/null +++ b/scripts/bumpversion.py @@ -0,0 +1,327 @@ +#!/usr/bin/env -S uv run --script +# /// script +# dependencies = [ +# "parver", +# ] +# /// +import difflib +import json +import logging +import runpy +import sys +from argparse import ArgumentParser +from dataclasses import dataclass +from pathlib import Path + +from parver import Version + +logger = logging.getLogger(__name__) +PROJECT_DIR = Path(__file__).resolve().parent.parent + + +def get_current_version() -> str: + d = runpy.run_path(str(PROJECT_DIR / "_version.py")) + return d["__version__"] + + +def sanitize_version(s: str) -> str: + parsed = Version.parse(s) + normalized = parsed.normalize() + out = str(normalized) + return out + + +@dataclass +class Args: + new_version: str + log_level: int + execute: bool + + @classmethod + def parse(cls, args=None): + parser = ArgumentParser() + parser.add_argument("new_version", type=sanitize_version) + parser.add_argument("-v", "--verbose", action="count", default=0) + parser.add_argument( + "--execute", + action="store_true", + help="write the changes; by default, just print the diff", + ) + p = parser.parse_args(args) + + log_level = { + 0: logging.WARNING, + 1: logging.INFO, + 2: logging.DEBUG, + }.get(p.verbose, logging.DEBUG) + + return cls(p.new_version, log_level, p.execute) + + +JSO = int | float | None | bool | str | list["JSO"] | dict[str, "JSO"] + + +class JsoUpdater: + def __init__( + self, old_version: str, new_version: str, key: str, substring=False + ) -> None: + self.old_version = old_version + self.new_version = new_version + self.key = key + self.substring = substring + + def apply(self, jso: JSO) -> int: + count = 0 + if jso is None or isinstance(jso, (int, float, bool, str)): + return count + elif isinstance(jso, list): + for item in jso: + count += self.apply(item) + elif isinstance(jso, dict): + val = jso.get(self.key) + if isinstance(val, str): + if self.substring: + if self.old_version in val: + jso[self.key] = val.replace(self.old_version, self.new_version) + count += 1 + elif self.old_version == val: + jso[self.key] = self.new_version + count += 1 + for v in jso.values(): + count += self.apply(v) + else: + raise TypeError(f"Unknown JSO type: {type(jso)}") + + return count + + +@dataclass +class Update: + old: str + new: str + + +class VersionUpdater: + def __init__(self, old_version: str, new_version: str) -> None: + self.old = old_version + self.new = new_version + self.mapping: dict[Path, Update] = {} + + def apply_updates(self) -> int: + count = 0 + for path, update in self.mapping.items(): + path.write_text(update.new) + count += 1 + return count + + def _update_example(self, fpath: Path) -> bool: + """Handle examples which are JSONC files which might be a full zarr.json document, + an attributes object, or an ome object, or something else. + + Currently does a dumb string replace. + """ + orig = fpath.read_text() + # if (ome := jso.get("attributes", {}).get("ome")) or (ome := jso.get("ome")): + # inner = ome + # else: + # inner = jso + + # if inner.get("version") == self.old: + # inner["version"] = self.new + # self.mapping[fpath] = Update(orig, json.dumps(jso, indent=2) + "\n") + # return True + old = f'"version": "{self.old}"' + new = f'"version": "{self.new}"' + if old in orig: + updated = orig.replace(old, new) + self.mapping[fpath] = Update(orig, updated) + return True + return False + + def _update_schema_id(self, jso: dict[str, JSO]) -> bool: + s = jso.get("$id", "") + if isinstance(s, str) and self.old in s: + jso["$id"] = s.replace(self.old, self.new) + return True + else: + return False + + def _update_version_schema(self) -> bool: + p = PROJECT_DIR / "schemas" / "_version.schema" + orig = p.read_text() + jso = json.loads(orig) + updated_id = self._update_schema_id(jso) + if not updated_id: + logger.warning("Did not update $id of %s", p) + vals = [] + updated_enum = False + + for s in jso["enum"]: + if s == self.old: + vals.append(self.new) + updated_enum = True + else: + vals.append(s) + + if not updated_enum: + logger.warning("Did not update enum field of %s", p) + + if updated_enum or updated_id: + self.mapping[p] = Update(orig, json.dumps(jso, indent=2)) + return True + return False + + def _update_schema(self, fpath: Path) -> int: + orig = fpath.read_text() + jso = json.loads(orig) + updated_id = self._update_schema_id(jso) + updater = JsoUpdater(self.old, self.new, "$ref", True) + count = updater.apply(jso) + total = count + updated_id + if total: + self.mapping[fpath] = Update(orig, json.dumps(jso, indent=2) + "\n") + return total + + def _update_schemas(self) -> int: + count = 0 + for p in PROJECT_DIR.joinpath("schemas").glob("*.schema*"): + if p.name.startswith("_") or not p.is_file(): + continue + n_updates = self._update_schema(p) + count += bool(n_updates) + return count + self._update_version_schema() + + def _update_examples(self) -> int: + count = 0 + for p in PROJECT_DIR.joinpath("examples").glob("**/*.json"): + if p.name.startswith(".") or not p.is_file(): + continue + count += self._update_example(p) + return count + + def _update_version_py(self): + fpath = PROJECT_DIR / "_version.py" + orig = fpath.read_text() + self.mapping[fpath] = Update(orig, f"__version__ = {self.new}\n") + return True + + def _update_ome(self, ome: dict[str, JSO]) -> bool: + if ome.get("version") == self.old: + ome["version"] = self.new + return True + return False + + def _update_attributes(self, attributes: dict[str, JSO]) -> bool: + ome = attributes.get("ome") + if isinstance(ome, dict): + return self._update_ome(ome) + return False + + def _update_attributes_file(self, fpath: Path) -> bool: + orig = fpath.read_text() + jso = json.loads(orig) + updated = self._update_attributes(jso) + if updated: + self.mapping[fpath] = Update(orig, json.dumps(jso, indent=2) + "\n") + return True + return False + + def _update_zarr_json_file(self, fpath: Path) -> bool: + orig = fpath.read_text() + jso = json.loads(orig) + attrs = jso.get("attributes") + if attrs is None: + return False + updated = self._update_attributes(attrs) + if updated: + self.mapping[fpath] = Update(orig, json.dumps(jso, indent=2) + "\n") + return True + return False + + def _update_zarr_hierarchy(self, dpath: Path) -> int: + count = 0 + for fpath in dpath.glob("**/zarr.json"): + count += self._update_zarr_json_file(fpath) + return count + + def _update_zarr_tests(self) -> int: + count = 0 + for dpath in PROJECT_DIR.joinpath("tests/zarr").glob("**/*.ome.zarr"): + count += self._update_zarr_hierarchy(dpath) + return count + + def _update_attributes_tests(self) -> int: + count = 0 + for fpath in PROJECT_DIR.joinpath("tests/attributes").glob("**/*.json"): + count += self._update_attributes_file(fpath) + return count + + def _update_changelog(self): + path = PROJECT_DIR.joinpath("version_history.md") + orig = path.read_text() + + updated = orig.replace( + "## Unreleased", + f"## Unreleased\n\n## {self.new} - TBC", + ) + if updated != orig: + self.mapping[path] = Update(orig, updated) + return True + return False + + def plan_updates(self) -> int: + count = 0 + count += self._update_examples() + count += self._update_schemas() + count += self._update_attributes_tests() + count += self._update_zarr_tests() + count += self._update_version_py() + count += self._update_changelog() + return count + + def list_updated_files(self) -> list[Path]: + return sorted(self.mapping) + + def _format_diff(self, path: Path) -> str: + update = self.mapping[path] + fname = str(path.relative_to(PROJECT_DIR)) + n1 = f"{fname} v{self.old}" + n2 = f"{fname} v{self.new}" + return "\n".join( + difflib.unified_diff( + update.old.splitlines(), + update.new.splitlines(), + fromfile=n1, + tofile=n2, + lineterm="", + ) + ) + + def format_diffs(self, path: Path | None = None): + if path is not None: + yield self._format_diff(path) + return + + for p in self.list_updated_files(): + yield self._format_diff(p) + + +def main(raw_args=None): + args = Args.parse(raw_args) + logging.basicConfig(level=args.log_level) + old_version = get_current_version() + + updater = VersionUpdater(old_version, args.new_version) + n_updates = updater.plan_updates() + if not n_updates: + logger.warning("No updates to make") + return 0 + if args.execute: + updater.apply_updates() + else: + sep = "\n\n" + ("-" * 80) + "\n\n" + print(sep.join(updater.format_diffs())) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/uv.lock b/uv.lock index 25179f9c..3bcbdcd0 100644 --- a/uv.lock +++ b/uv.lock @@ -729,7 +729,7 @@ wheels = [ [[package]] name = "jupyter-book" -version = "2.0.0b3" +version = "2.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ipykernel" }, @@ -738,9 +738,9 @@ dependencies = [ { name = "nodeenv" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/d1/6e53124c8a98ea39192fff5a162aa239ff719a8aa10f0f0e5bf3bb466f5c/jupyter_book-2.0.0b3.tar.gz", hash = "sha256:f55e23cc33721b13142e42753a28fd145158b97bcef2a513f7fcd2cc403f72f6", size = 14475767, upload-time = "2025-08-20T11:06:17.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/a5/17b115c2d890352871eec31212702f402a67503adbce9f739b5a89f84ec3/jupyter_book-2.0.2.tar.gz", hash = "sha256:36e1428ad85a70e500513793edff3be83c4f036f80eb67bb909180914f50094b", size = 14439814, upload-time = "2025-11-03T17:49:57.327Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/1b/36d46d9da0fb50b9f584f3a0d93fad245e65d3fb46ba3d7e653b541c3eef/jupyter_book-2.0.0b3-py3-none-any.whl", hash = "sha256:ca01be03a4e5d54f7bfef1150837052ccb3ea3f8810a2687db59171f46ef30d0", size = 2606638, upload-time = "2025-08-20T11:06:14.953Z" }, + { url = "https://files.pythonhosted.org/packages/46/0d/0a6fdf9587634452b9ced1de89280a3daeb1fee16878ca442dfe76c9b0a8/jupyter_book-2.0.2-py3-none-any.whl", hash = "sha256:7ccbb5f00dc55d172f148eae179d257e4cfe815ee297050553733d13018cae57", size = 2600900, upload-time = "2025-11-03T17:49:55.137Z" }, ] [[package]] @@ -1094,15 +1094,11 @@ dependencies = [ { name = "tomli" }, ] -[package.optional-dependencies] -testing = [ - { name = "codespell" }, - { name = "pytest" }, -] - [package.dev-dependencies] dev = [ { name = "codespell" }, + { name = "jsonschema" }, + { name = "parver" }, { name = "prek" }, { name = "pytest" }, { name = "rust-just" }, @@ -1112,25 +1108,25 @@ lint = [ { name = "prek" }, ] test = [ + { name = "jsonschema" }, { name = "pytest" }, ] [package.metadata] requires-dist = [ - { name = "codespell", marker = "extra == 'testing'" }, { name = "json-schema-for-humans" }, { name = "json-with-comments" }, { name = "jsonschema-markdown" }, - { name = "jupyter-book", specifier = "==2.0.0b3" }, + { name = "jupyter-book", specifier = "==2.0.2" }, { name = "mystmd", specifier = "==1.6.3" }, - { name = "pytest", marker = "extra == 'testing'" }, { name = "tomli" }, ] -provides-extras = ["testing"] [package.metadata.requires-dev] dev = [ { name = "codespell" }, + { name = "jsonschema" }, + { name = "parver", specifier = ">=1.0.1.post0" }, { name = "prek" }, { name = "pytest" }, { name = "rust-just" }, @@ -1139,7 +1135,10 @@ lint = [ { name = "codespell" }, { name = "prek" }, ] -test = [{ name = "pytest" }] +test = [ + { name = "jsonschema" }, + { name = "pytest" }, +] [[package]] name = "nodeenv" @@ -1186,6 +1185,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, ] +[[package]] +name = "parver" +version = "1.0.1.post0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/63/fe1b2d9f19ce47e4a0da6d33ea19a20d7bd1632da432d8e32b20724c741a/parver-1.0.1.post0.tar.gz", hash = "sha256:1bfb9c3f13d5daccaa10eb605679b5dbd4bf2e15b4f5fa1bdf178c5c3f065a2c", size = 105980, upload-time = "2026-07-30T12:32:19.754Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ad/92776e7199caee67944945fb2c3988443060d318782d8c25d9bb9f8d235d/parver-1.0.1.post0-py3-none-any.whl", hash = "sha256:81f5cbe349da9939749ece40b70ef97b94a346f750750ed49f3ebbf1a40f1195", size = 20853, upload-time = "2026-07-30T12:32:18.289Z" }, +] + [[package]] name = "pexpect" version = "4.9.0" From 0e0c9ef245a9c83a6354de28b95ca18d72c26b8a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Fri, 18 Sep 2026 16:19:28 +0100 Subject: [PATCH 65/79] WIP version-bumping script --- scripts/bumpversion.py | 85 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index fdff2e8a..cdb7597b 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -4,6 +4,7 @@ # "parver", # ] # /// +from collections.abc import Iterable, Sequence import difflib import json import logging @@ -12,6 +13,7 @@ from argparse import ArgumentParser from dataclasses import dataclass from pathlib import Path +from typing import TypeVar from parver import Version @@ -306,6 +308,7 @@ def format_diffs(self, path: Path | None = None): yield self._format_diff(p) + def main(raw_args=None): args = Args.parse(raw_args) logging.basicConfig(level=args.log_level) @@ -323,5 +326,85 @@ def main(raw_args=None): print(sep.join(updater.format_diffs())) +@dataclass(frozen=True) +class Context: + lines: int = 3 + characters: int = 80 + + +DEFAULT_CONTEXT = Context() + + +@dataclass +class Pos: + offset: int + line: int + col: int + + +def iter_occurrences(haystack: str, needle: str) -> Iterable[int]: + offset = 0 + while True: + local_offset = haystack.find(needle, offset) + if local_offset < 0: + return + start = offset + local_offset + yield start + offset = start + len(needle) + + +T = TypeVar("T") + + +def scan(seq: Sequence[T], start=0, step=1) -> Iterable[T]: + end = len(seq) + idx = start + while start < 0: + idx += end + + while True: + yield seq[idx] + idx += step + if step >= end or step < 0: + return + + +class InteractiveReplacer: + def __init__(self, text: str, old: str, new: str, context: int = 80) -> None: + self.text = text + self.old = old + self.new = new + self.context = context + + def iter_occurrences(self) -> Iterable[int]: + offset = 0 + while True: + local_offset = self.text.find(self.old, offset) + if local_offset < 0: + return + start = offset + local_offset + yield start + offset = start + len(self.old) + + def iter_diffs(self) -> Iterable[str]: + for offset in self.iter_occurrences(): + pre = self.text[max(offset - self.context, 0) : offset] + end = offset + len(self.old) + post = self.text[end : min(end, len(self.text))] + + before = f"{pre}{self.old}{post}" + after = f"{pre}{self.new}{post}" + + yield just_diff(before, after) + + +def just_diff(before: str, after: str) -> str: + lines = difflib.unified_diff(before.splitlines(), after.splitlines()) + return "\n".join(ln for ln in lines if not ln.endswith("\n")) + + if __name__ == "__main__": - sys.exit(main()) + # sys.exit(main()) + a = list("abcdefghijk") + b = list("AbcdefghijK") + print("\nLINEBREAK\n".join(difflib.context_diff(a, b, lineterm=""))) From 43507e92c705ee9b138d6bc4916d5fa8bbc3295b Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:18:55 +0100 Subject: [PATCH 66/79] Remove text-replacing functions --- scripts/bumpversion.py | 94 +++++------------------------------------- 1 file changed, 10 insertions(+), 84 deletions(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index cdb7597b..70147222 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -4,7 +4,11 @@ # "parver", # ] # /// -from collections.abc import Iterable, Sequence +"""Update version strings in structured files +(schemas, examples, version.py, changelog, tests). + +Text files must be updated manually. +""" import difflib import json import logging @@ -13,7 +17,6 @@ from argparse import ArgumentParser from dataclasses import dataclass from pathlib import Path -from typing import TypeVar from parver import Version @@ -41,7 +44,7 @@ class Args: @classmethod def parse(cls, args=None): - parser = ArgumentParser() + parser = ArgumentParser(description=__doc__) parser.add_argument("new_version", type=sanitize_version) parser.add_argument("-v", "--verbose", action="count", default=0) parser.add_argument( @@ -308,7 +311,6 @@ def format_diffs(self, path: Path | None = None): yield self._format_diff(p) - def main(raw_args=None): args = Args.parse(raw_args) logging.basicConfig(level=args.log_level) @@ -316,95 +318,19 @@ def main(raw_args=None): updater = VersionUpdater(old_version, args.new_version) n_updates = updater.plan_updates() + if not n_updates: logger.warning("No updates to make") return 0 + if args.execute: updater.apply_updates() else: sep = "\n\n" + ("-" * 80) + "\n\n" print(sep.join(updater.format_diffs())) - -@dataclass(frozen=True) -class Context: - lines: int = 3 - characters: int = 80 - - -DEFAULT_CONTEXT = Context() - - -@dataclass -class Pos: - offset: int - line: int - col: int - - -def iter_occurrences(haystack: str, needle: str) -> Iterable[int]: - offset = 0 - while True: - local_offset = haystack.find(needle, offset) - if local_offset < 0: - return - start = offset + local_offset - yield start - offset = start + len(needle) - - -T = TypeVar("T") - - -def scan(seq: Sequence[T], start=0, step=1) -> Iterable[T]: - end = len(seq) - idx = start - while start < 0: - idx += end - - while True: - yield seq[idx] - idx += step - if step >= end or step < 0: - return - - -class InteractiveReplacer: - def __init__(self, text: str, old: str, new: str, context: int = 80) -> None: - self.text = text - self.old = old - self.new = new - self.context = context - - def iter_occurrences(self) -> Iterable[int]: - offset = 0 - while True: - local_offset = self.text.find(self.old, offset) - if local_offset < 0: - return - start = offset + local_offset - yield start - offset = start + len(self.old) - - def iter_diffs(self) -> Iterable[str]: - for offset in self.iter_occurrences(): - pre = self.text[max(offset - self.context, 0) : offset] - end = offset + len(self.old) - post = self.text[end : min(end, len(self.text))] - - before = f"{pre}{self.old}{post}" - after = f"{pre}{self.new}{post}" - - yield just_diff(before, after) - - -def just_diff(before: str, after: str) -> str: - lines = difflib.unified_diff(before.splitlines(), after.splitlines()) - return "\n".join(ln for ln in lines if not ln.endswith("\n")) + print("N.B. free text files like index.md must be updated manually", sys.stdout) if __name__ == "__main__": - # sys.exit(main()) - a = list("abcdefghijk") - b = list("AbcdefghijK") - print("\nLINEBREAK\n".join(difflib.context_diff(a, b, lineterm=""))) + sys.exit(main()) From 55915635bb1279140573ccdfa9fb08672abd8724 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:39:35 +0100 Subject: [PATCH 67/79] Use myst-substitutions --- index.md | 12 ++++++------ myst.yml | 4 ++++ scripts/bumpversion.py | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/index.md b/index.md index 98e249e0..e2199ba7 100644 --- a/index.md +++ b/index.md @@ -4,8 +4,8 @@ short_title: OME-Zarr authors: " " --- -# Version 0.9.dev2 -(ngff-spec-0.9.dev2)= +# Version {{ ngffversion }} +(ngff-spec-{{ ngffversion }})= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -22,7 +22,7 @@ All specifications are submitted to the community for review. ## Status of This Document -The working title version of this specification is 0.9.dev2. +The working title version of this specification is {{ ngffversion }}. Migration scripts will be provided between numbered versions. Data written with these latest changes will not necessarily be supported. @@ -181,14 +181,14 @@ The OME-Zarr Metadata is stored in the various `zarr.json` files throughout the The OME-Zarr Metadata version MUST be consistent within a hierarchy. The group `attributes` MUST contain a key `ome`. The value of the `ome` key MUST be a JSON -object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-0.9.dev2). +object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-{{ ngffversion }}). ```jsonc { // ... "attributes": { "ome": { - "version": "0.9.dev2", + "version": "{{ ngffversion }}", // ... } } @@ -1863,7 +1863,7 @@ The `zarr.json` under the `labels` group contains a JSON object with the key `la { "attributes": { "ome": { - "version": "0.9.dev2", + "version": "{{ ngffversion }}", "labels": [ "cell_segmentation" ] diff --git a/myst.yml b/myst.yml index 3e0e41a9..52ebe472 100644 --- a/myst.yml +++ b/myst.yml @@ -5,6 +5,10 @@ project: github: ome/ngff-spec bibliography: - references.bib + plugins: + - https://github.com/myst-contrib/myst-substitutions/releases/download/v0.2/index.mjs + substitutions: + ngffversion: "0.9.dev2" exports: - format: pdf template: plain_latex_book diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 70147222..58735c17 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -106,6 +106,9 @@ class Update: new: str +YAML_TEMPLATE = 'ngffversion: "{version}"' + + class VersionUpdater: def __init__(self, old_version: str, new_version: str) -> None: self.old = old_version @@ -274,6 +277,19 @@ def _update_changelog(self): return True return False + def _update_substitutions(self) -> bool: + """Update the substitutions object in myst.yml""" + myst_path = PROJECT_DIR / "myst.yml" + orig = myst_path.read_text() + updated = orig.replace( + YAML_TEMPLATE.format(version=self.old), + YAML_TEMPLATE.format(version=self.new), + ) + if updated != orig: + self.mapping[myst_path] = Update(orig, updated) + return True + return False + def plan_updates(self) -> int: count = 0 count += self._update_examples() From 75c59d9011035818d9069ca4bda799795ce5afc2 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:44:25 +0100 Subject: [PATCH 68/79] Use myst-substitutions in bumpversion --- scripts/bumpversion.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 58735c17..770c625b 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -298,6 +298,7 @@ def plan_updates(self) -> int: count += self._update_zarr_tests() count += self._update_version_py() count += self._update_changelog() + count += self._update_substitutions() return count def list_updated_files(self) -> list[Path]: @@ -345,8 +346,6 @@ def main(raw_args=None): sep = "\n\n" + ("-" * 80) + "\n\n" print(sep.join(updater.format_diffs())) - print("N.B. free text files like index.md must be updated manually", sys.stdout) - if __name__ == "__main__": sys.exit(main()) From ccecfff791c1183ff3febf3a6be6575ca08572cc Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:45:31 +0100 Subject: [PATCH 69/79] Update citing.md --- citing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/citing.md b/citing.md index 70ba1b99..e2d8fe38 100644 --- a/citing.md +++ b/citing.md @@ -7,7 +7,7 @@ author: "" [Next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.](https://ngff.openmicroscopy.org/0.4) J. Moore, *et al*. Open Microscopy Environment Consortium, 8 February 2022. -This edition of the specification is [https://ngff.openmicroscopy.org/{{version}}](https://ngff.openmicroscopy.org/{{version}}]). +This edition of the specification is [https://ngff.openmicroscopy.org/{{ ngffversion }}](https://ngff.openmicroscopy.org/{{ ngffversion }}]). The latest edition is publicly available {cite}`ngff_spec_latest`. ```{bibliography} From a6da3e72498b6d82cb8151194680156f0077048a Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:46:39 +0100 Subject: [PATCH 70/79] fix typo --- citing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/citing.md b/citing.md index e2d8fe38..c6d34392 100644 --- a/citing.md +++ b/citing.md @@ -7,7 +7,7 @@ author: "" [Next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.](https://ngff.openmicroscopy.org/0.4) J. Moore, *et al*. Open Microscopy Environment Consortium, 8 February 2022. -This edition of the specification is [https://ngff.openmicroscopy.org/{{ ngffversion }}](https://ngff.openmicroscopy.org/{{ ngffversion }}]). +This edition of the specification is [https://ngff.openmicroscopy.org/{{ ngffversion }}](https://ngff.openmicroscopy.org/{{ ngffversion }}). The latest edition is publicly available {cite}`ngff_spec_latest`. ```{bibliography} From 6524bbdbe18d11a3668b295d6b1f0cd3a46d8bd3 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 10:49:56 +0100 Subject: [PATCH 71/79] Roll back myst-substitutions --- citing.md | 2 +- index.md | 12 ++++++------ myst.yml | 4 ---- scripts/bumpversion.py | 22 +++++----------------- 4 files changed, 12 insertions(+), 28 deletions(-) diff --git a/citing.md b/citing.md index c6d34392..53f3ec4e 100644 --- a/citing.md +++ b/citing.md @@ -7,7 +7,7 @@ author: "" [Next-generation file format (NGFF) specifications for storing bioimaging data in the cloud.](https://ngff.openmicroscopy.org/0.4) J. Moore, *et al*. Open Microscopy Environment Consortium, 8 February 2022. -This edition of the specification is [https://ngff.openmicroscopy.org/{{ ngffversion }}](https://ngff.openmicroscopy.org/{{ ngffversion }}). +This edition of the specification is [https://ngff.openmicroscopy.org/{{version}}](https://ngff.openmicroscopy.org/{{version}}). The latest edition is publicly available {cite}`ngff_spec_latest`. ```{bibliography} diff --git a/index.md b/index.md index e2199ba7..e981108a 100644 --- a/index.md +++ b/index.md @@ -4,8 +4,8 @@ short_title: OME-Zarr authors: " " --- -# Version {{ ngffversion }} -(ngff-spec-{{ ngffversion }})= +# Version {{ 0.9.dev2 }} +(ngff-spec-{{ 0.9.dev2 }})= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -22,7 +22,7 @@ All specifications are submitted to the community for review. ## Status of This Document -The working title version of this specification is {{ ngffversion }}. +The working title version of this specification is {{ 0.9.dev2 }}. Migration scripts will be provided between numbered versions. Data written with these latest changes will not necessarily be supported. @@ -181,14 +181,14 @@ The OME-Zarr Metadata is stored in the various `zarr.json` files throughout the The OME-Zarr Metadata version MUST be consistent within a hierarchy. The group `attributes` MUST contain a key `ome`. The value of the `ome` key MUST be a JSON -object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-{{ ngffversion }}). +object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-{{ 0.9.dev2 }}). ```jsonc { // ... "attributes": { "ome": { - "version": "{{ ngffversion }}", + "version": "{{ 0.9.dev2 }}", // ... } } @@ -1863,7 +1863,7 @@ The `zarr.json` under the `labels` group contains a JSON object with the key `la { "attributes": { "ome": { - "version": "{{ ngffversion }}", + "version": "{{ 0.9.dev2 }}", "labels": [ "cell_segmentation" ] diff --git a/myst.yml b/myst.yml index 52ebe472..3e0e41a9 100644 --- a/myst.yml +++ b/myst.yml @@ -5,10 +5,6 @@ project: github: ome/ngff-spec bibliography: - references.bib - plugins: - - https://github.com/myst-contrib/myst-substitutions/releases/download/v0.2/index.mjs - substitutions: - ngffversion: "0.9.dev2" exports: - format: pdf template: plain_latex_book diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 770c625b..3f92b368 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -106,9 +106,6 @@ class Update: new: str -YAML_TEMPLATE = 'ngffversion: "{version}"' - - class VersionUpdater: def __init__(self, old_version: str, new_version: str) -> None: self.old = old_version @@ -277,19 +274,6 @@ def _update_changelog(self): return True return False - def _update_substitutions(self) -> bool: - """Update the substitutions object in myst.yml""" - myst_path = PROJECT_DIR / "myst.yml" - orig = myst_path.read_text() - updated = orig.replace( - YAML_TEMPLATE.format(version=self.old), - YAML_TEMPLATE.format(version=self.new), - ) - if updated != orig: - self.mapping[myst_path] = Update(orig, updated) - return True - return False - def plan_updates(self) -> int: count = 0 count += self._update_examples() @@ -298,7 +282,6 @@ def plan_updates(self) -> int: count += self._update_zarr_tests() count += self._update_version_py() count += self._update_changelog() - count += self._update_substitutions() return count def list_updated_files(self) -> list[Path]: @@ -346,6 +329,11 @@ def main(raw_args=None): sep = "\n\n" + ("-" * 80) + "\n\n" print(sep.join(updater.format_diffs())) + print( + "N.B. version strings in free text like index.md must be updated manually", + file=sys.stdout, + ) + if __name__ == "__main__": sys.exit(main()) From 0d1757629bd3f0b5539c1316e779fc2a5e96e6c4 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 11:54:47 +0100 Subject: [PATCH 72/79] Remove vestigial templating --- index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.md b/index.md index e981108a..98e249e0 100644 --- a/index.md +++ b/index.md @@ -4,8 +4,8 @@ short_title: OME-Zarr authors: " " --- -# Version {{ 0.9.dev2 }} -(ngff-spec-{{ 0.9.dev2 }})= +# Version 0.9.dev2 +(ngff-spec-0.9.dev2)= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -22,7 +22,7 @@ All specifications are submitted to the community for review. ## Status of This Document -The working title version of this specification is {{ 0.9.dev2 }}. +The working title version of this specification is 0.9.dev2. Migration scripts will be provided between numbered versions. Data written with these latest changes will not necessarily be supported. @@ -181,14 +181,14 @@ The OME-Zarr Metadata is stored in the various `zarr.json` files throughout the The OME-Zarr Metadata version MUST be consistent within a hierarchy. The group `attributes` MUST contain a key `ome`. The value of the `ome` key MUST be a JSON -object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-{{ 0.9.dev2 }}). +object that MUST contain a `version` key, the value of which MUST be a string specifying the version of the OME-Zarr specification defined by [this document](#ngff-spec-0.9.dev2). ```jsonc { // ... "attributes": { "ome": { - "version": "{{ 0.9.dev2 }}", + "version": "0.9.dev2", // ... } } @@ -1863,7 +1863,7 @@ The `zarr.json` under the `labels` group contains a JSON object with the key `la { "attributes": { "ome": { - "version": "{{ 0.9.dev2 }}", + "version": "0.9.dev2", "labels": [ "cell_segmentation" ] From 56516294b9f5d7646c63ff59ddde4ac54b71ae3d Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 12:09:43 +0100 Subject: [PATCH 73/79] Check git history before applying changes --- scripts/bumpversion.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 3f92b368..623c74a9 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -17,6 +17,7 @@ from argparse import ArgumentParser from dataclasses import dataclass from pathlib import Path +import subprocess as sp from parver import Version @@ -311,6 +312,20 @@ def format_diffs(self, path: Path | None = None): yield self._format_diff(p) +def git_status(): + result = sp.run( + ["git", "status", "--porcelain"], check=True, text=True, capture_output=True + ) + s = result.stdout.strip() + out = [] + if s: + for line in s.splitlines(): + status = line[:2].strip() + path = Path(line[3:]) + out.append((status, path)) + return out + + def main(raw_args=None): args = Args.parse(raw_args) logging.basicConfig(level=args.log_level) @@ -324,6 +339,14 @@ def main(raw_args=None): return 0 if args.execute: + changes = git_status() + if changes: + print( + f"You have {len(changes)} changed files in git. " + "Commit or stash them before retrying with --execute.", + file=sys.stderr, + ) + return 1 updater.apply_updates() else: sep = "\n\n" + ("-" * 80) + "\n\n" @@ -333,6 +356,7 @@ def main(raw_args=None): "N.B. version strings in free text like index.md must be updated manually", file=sys.stdout, ) + return 0 if __name__ == "__main__": From aed51f1729f1369dd290ba919abf0d03a66eb131 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 13:50:16 +0100 Subject: [PATCH 74/79] sort imports --- scripts/bumpversion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 623c74a9..6b9cfd66 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -13,11 +13,11 @@ import json import logging import runpy +import subprocess as sp import sys from argparse import ArgumentParser from dataclasses import dataclass from pathlib import Path -import subprocess as sp from parver import Version From b01d76be9eafe6474c8e410fc4f3cff94ccc1350 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 14:02:28 +0100 Subject: [PATCH 75/79] Fix broken zarr test cases --- .../duplicate_orientation.ome.zarr/zarr.json | 112 +++++++++--------- .../zarr.json} | 0 .../zarr.json | 112 +++++++++--------- .../zarr.json | 112 +++++++++--------- .../non_space_orientation.ome.zarr/zarr.json | 110 ++++++++--------- 5 files changed, 231 insertions(+), 215 deletions(-) rename tests/zarr/spec/invalid/image/{many_space_axes.ome.zarr => many_space_axes.ome.zarr/zarr.json} (100%) diff --git a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json index 0bb76b98..42dda946 100644 --- a/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/duplicate_orientation.ome.zarr/zarr.json @@ -1,60 +1,64 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "left-to-right" + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "left-to-right" + } + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "left-to-right" + } } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "left-to-right" + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": { - "name": "physical" - }, - "input": { - "path": "array" - }, - "name": "transform-name" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" + ] + } + ] + } + ] }, - "valid": false + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } } } diff --git a/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr b/tests/zarr/spec/invalid/image/many_space_axes.ome.zarr/zarr.json similarity index 100% rename from tests/zarr/spec/invalid/image/many_space_axes.ome.zarr rename to tests/zarr/spec/invalid/image/many_space_axes.ome.zarr/zarr.json diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json index 0b8fea72..c2b4a5ec 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation.ome.zarr/zarr.json @@ -1,60 +1,64 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "micrometer", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "top-to-bottom" + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "micrometer", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "top-to-bottom" + } + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "empty-to-full" + } } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "empty-to-full" + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": { - "name": "physical" - }, - "input": { - "path": "array" - }, - "name": "transform-name" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" + ] + } + ] + } + ] }, - "valid": false + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } } } diff --git a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json index 6f4e1440..4a4151d0 100644 --- a/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_existent_orientation_type.ome.zarr/zarr.json @@ -1,60 +1,64 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "space", - "name": "y", - "unit": "kilometer", - "discrete": false, - "orientation": { - "type": "geographical", - "value": "east-to-west" + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "space", + "name": "y", + "unit": "kilometer", + "discrete": false, + "orientation": { + "type": "geographical", + "value": "east-to-west" + } + }, + { + "type": "space", + "name": "x", + "unit": "parsec", + "discrete": false, + "orientation": { + "type": "astronomical", + "value": "nadir-to-zenith" + } } - }, - { - "type": "space", - "name": "x", - "unit": "parsec", - "discrete": false, - "orientation": { - "type": "astronomical", - "value": "nadir-to-zenith" + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": { - "name": "physical" - }, - "input": { - "path": "array" - }, - "name": "transform-name" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" + ] + } + ] + } + ] }, - "valid": false + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } } } diff --git a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json index d4141340..e9f3f028 100644 --- a/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json +++ b/tests/zarr/spec/invalid/image/non_space_orientation.ome.zarr/zarr.json @@ -1,59 +1,63 @@ { - "ome": { - "version": "0.9.dev2", - "multiscales": [ - { - "name": "multiscales", - "coordinateSystems": [ - { - "name": "physical", - "axes": [ - { - "type": "custom", - "name": "m", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "anterior-to-posterior" + "zarr_format": 3, + "node_type": "group", + "attributes": { + "ome": { + "version": "0.9.dev2", + "multiscales": [ + { + "name": "multiscales", + "coordinateSystems": [ + { + "name": "physical", + "axes": [ + { + "type": "custom", + "name": "m", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "anterior-to-posterior" + } + }, + { + "type": "space", + "name": "x", + "unit": "micrometer", + "discrete": false, + "orientation": { + "type": "anatomical", + "value": "left-to-right" + } } - }, - { - "type": "space", - "name": "x", - "unit": "micrometer", - "discrete": false, - "orientation": { - "type": "anatomical", - "value": "left-to-right" + ] + } + ], + "datasets": [ + { + "path": "array", + "coordinateTransformations": [ + { + "type": "identity", + "output": { + "name": "physical" + }, + "input": { + "path": "array" + }, + "name": "transform-name" } - } - ] - } - ], - "datasets": [ - { - "path": "array", - "coordinateTransformations": [ - { - "type": "identity", - "output": { - "name": "physical" - }, - "input": { - "path": "array" - }, - "name": "transform-name" - } - ] - } - ] - } - ] - }, - "_conformance": { - "schema": { - "id": "schemas/image.schema" + ] + } + ] + } + ] }, - "valid": false + "_conformance": { + "schema": { + "id": "schemas/image.schema" + }, + "valid": false + } } } From d27e1645ab1625269cc62473d747729f5c9ebaf2 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 14:07:32 +0100 Subject: [PATCH 76/79] get current version in test_validation --- tests/test_validation.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_validation.py b/tests/test_validation.py index 6c306a5c..e08f37dd 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,6 +1,7 @@ import glob import json import os +import runpy from dataclasses import dataclass from pathlib import Path @@ -11,6 +12,8 @@ os.chdir(Path(__file__).parent.parent) +version = runpy.run_path("_version.py")["__version__"] + schema_store = {} for schema_filename in glob.glob("schemas/*"): if schema_filename.endswith(".schema"): @@ -19,7 +22,7 @@ schema_store[schema["$id"]] = schema GENERIC_SCHEMA = schema_store[ - "https://ngff.openmicroscopy.org/0.9.dev2/schemas/ome_zarr.schema" + f"https://ngff.openmicroscopy.org/{version}/schemas/ome_zarr.schema" ] From 7ee729e5e9e6bb40cbea38abc56073ba9a5e5094 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 14:19:12 +0100 Subject: [PATCH 77/79] fix bump script --- scripts/bumpversion.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 6b9cfd66..c3a4252f 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -10,6 +10,7 @@ Text files must be updated manually. """ import difflib +import functools import json import logging import runpy @@ -208,7 +209,7 @@ def _update_examples(self) -> int: def _update_version_py(self): fpath = PROJECT_DIR / "_version.py" orig = fpath.read_text() - self.mapping[fpath] = Update(orig, f"__version__ = {self.new}\n") + self.mapping[fpath] = Update(orig, f'__version__ = "{self.new}"\n') return True def _update_ome(self, ome: dict[str, JSO]) -> bool: @@ -326,6 +327,12 @@ def git_status(): return out +@functools.wraps(print) +def eprint(*args, **kwargs): + kwargs.setdefault("file", sys.stderr) + print(*args, **kwargs) + + def main(raw_args=None): args = Args.parse(raw_args) logging.basicConfig(level=args.log_level) @@ -338,6 +345,8 @@ def main(raw_args=None): logger.warning("No updates to make") return 0 + changed_str = "\n\t".join(str(c) for c in updater.list_updated_files()) + if args.execute: changes = git_status() if changes: @@ -348,13 +357,14 @@ def main(raw_args=None): ) return 1 updater.apply_updates() + eprint(f"Changed {n_updates} files:\n\t{changed_str}") else: sep = "\n\n" + ("-" * 80) + "\n\n" print(sep.join(updater.format_diffs())) + eprint(f"Would change {n_updates} files:\n\t{changed_str}") - print( + eprint( "N.B. version strings in free text like index.md must be updated manually", - file=sys.stdout, ) return 0 From d7ce7549e6b83f84804ae07b302befad3b1ef8c9 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 14:37:02 +0100 Subject: [PATCH 78/79] List files to check manually --- scripts/bumpversion.py | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index c3a4252f..835c5c31 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -17,6 +17,7 @@ import subprocess as sp import sys from argparse import ArgumentParser +from collections.abc import Iterable from dataclasses import dataclass from pathlib import Path @@ -333,6 +334,29 @@ def eprint(*args, **kwargs): print(*args, **kwargs) +def list_tracked_files() -> list[Path]: + res = sp.run( + ["git", "ls-tree", "-r", "HEAD", "--name-only"], + check=True, + capture_output=True, + text=True, + ) + return [PROJECT_DIR / p for p in res.stdout.strip().splitlines(False)] + + +def find_remaining_old(old: str) -> list[Path]: + ignore = {PROJECT_DIR / "uv.lock", PROJECT_DIR / "version_history.md"} + return [ + p + for p in sorted(list_tracked_files()) + if p not in ignore and old in p.read_text() + ] + + +def format_list(items: Iterable, sep="\n", indent="\t"): + return sep.join(f"{indent}{item}" for item in items) + + def main(raw_args=None): args = Args.parse(raw_args) logging.basicConfig(level=args.log_level) @@ -345,8 +369,6 @@ def main(raw_args=None): logger.warning("No updates to make") return 0 - changed_str = "\n\t".join(str(c) for c in updater.list_updated_files()) - if args.execute: changes = git_status() if changes: @@ -357,11 +379,21 @@ def main(raw_args=None): ) return 1 updater.apply_updates() - eprint(f"Changed {n_updates} files:\n\t{changed_str}") + eprint(f"Changed {n_updates} files.") else: sep = "\n\n" + ("-" * 80) + "\n\n" print(sep.join(updater.format_diffs())) - eprint(f"Would change {n_updates} files:\n\t{changed_str}") + eprint(f"Would change {n_updates} files. Use --execute to make changes.") + + remaining_old = find_remaining_old(old_version) + + if not args.execute: + remaining_old = [x for x in remaining_old if x not in updater.mapping] + + if remaining_old: + eprint( + f"{len(remaining_old)} files may still have references to the old version:\n{format_list(remaining_old)}" + ) eprint( "N.B. version strings in free text like index.md must be updated manually", From 5267b0bddf1fbde4dbaa9a55ad9a0e3d4c3647f5 Mon Sep 17 00:00:00 2001 From: Chris Barnes Date: Wed, 23 Sep 2026 17:57:53 +0100 Subject: [PATCH 79/79] Give a grep command for finding lines --- scripts/bumpversion.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/bumpversion.py b/scripts/bumpversion.py index 835c5c31..a7de6c69 100755 --- a/scripts/bumpversion.py +++ b/scripts/bumpversion.py @@ -394,6 +394,9 @@ def main(raw_args=None): eprint( f"{len(remaining_old)} files may still have references to the old version:\n{format_list(remaining_old)}" ) + eprint( + f"Find line references with\n\tgrep --color -n -F '{old_version}' $(git ls-tree -r HEAD --name-only)" + ) eprint( "N.B. version strings in free text like index.md must be updated manually",