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/.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 diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml new file mode 100644 index 00000000..dd4d91b5 --- /dev/null +++ b/.github/workflows/build-lint.yml @@ -0,0 +1,23 @@ +name: "Build and Lint Site" + +on: + workflow_dispatch: + push: + pull_request: + +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: 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 diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 7c9eafb1..559e74ba 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -1,12 +1,10 @@ -# Codespell configuration is within .codespellrc +# Codespell configuration is within pyproject.toml --- name: Codespell on: push: - branches: [main] pull_request: - branches: [main] permissions: contents: read @@ -18,6 +16,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..950422b9 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -8,9 +8,16 @@ 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 + - 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 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/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/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/_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/authors.yml b/authors.yml index 5c2d9174..e42e59e4 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 @@ -169,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 @@ -189,7 +192,7 @@ project: - name: Constantin Pape github: constantinpape orcid: 0000-0001-6562-7187 - + # R - name: Sebastian Rhode github: sebi06 diff --git a/citing.md b/citing.md index 978817fb..53f3ec4e 100644 --- a/citing.md +++ b/citing.md @@ -7,9 +7,9 @@ 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/{{version}}](https://ngff.openmicroscopy.org/{{version}}). The latest edition is publicly available {cite}`ngff_spec_latest`. ```{bibliography} :style: unsrt -``` \ No newline at end of file +``` diff --git a/conformance/ome_zarr_conformance.py b/conformance/ome_zarr_conformance.py index 5614e44c..3f397ae3 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/")) @@ -172,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." ) ) @@ -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/contribute.md b/contribute.md index d41fb94b..c012b4e9 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,33 @@ 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 +``` + +To see all available recipes, use + +```bash +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, @@ -51,7 +77,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. @@ -70,19 +96,35 @@ 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 +[This is the visible text](#your-reference-name) +``` + +Use `(your-reference)=` on the line before an element like a section header to set the target for that element. ```markdown -anchor: (your-reference-name)= -reference: [This is a reference](#your-reference-name) +(version0.9:some-section)= +## Some section + +(version0.9:some-note)= +:::{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 @@ -112,7 +154,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: @@ -162,4 +204,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. 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/.config.json b/examples/label/.config.json new file mode 100644 index 00000000..b6d18fe6 --- /dev/null +++ b/examples/label/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/label.schema" +} diff --git a/examples/label_strict/colors_properties.json b/examples/label/colors_properties.json similarity index 98% rename from examples/label_strict/colors_properties.json rename to examples/label/colors_properties.json index a31ac0cc..ee3d9d13 100644 --- a/examples/label_strict/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/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..1bb8dc87 --- /dev/null +++ b/examples/multiscales/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/image.schema" +} diff --git a/examples/multiscales_strict/multiscales_example.json b/examples/multiscales/multiscales_example.json similarity index 97% rename from examples/multiscales_strict/multiscales_example.json rename to examples/multiscales/multiscales_example.json index dc94c15a..0b33ebc3 100644 --- a/examples/multiscales_strict/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_strict/multiscales_example_relative.json b/examples/multiscales/multiscales_example_relative.json similarity index 97% rename from examples/multiscales_strict/multiscales_example_relative.json rename to examples/multiscales/multiscales_example_relative.json index 3922338b..72ca6182 100644 --- a/examples/multiscales_strict/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" : [ { @@ -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_strict/multiscales_reference_to_label.json b/examples/multiscales/multiscales_reference_to_label.json similarity index 96% rename from examples/multiscales_strict/multiscales_reference_to_label.json rename to examples/multiscales/multiscales_reference_to_label.json index 33b85a42..bea349a7 100644 --- a/examples/multiscales_strict/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", @@ -33,8 +33,8 @@ "input": {"path": "labels/cell_segmentation","name": "physical"}, "output": {"name": "physical"} } - ] + ] } ] } -} \ No newline at end of file +} diff --git a/examples/multiscales_strict/multiscales_transformations.json b/examples/multiscales/multiscales_transformations.json similarity index 98% rename from examples/multiscales_strict/multiscales_transformations.json rename to examples/multiscales/multiscales_transformations.json index 921f800e..456dd640 100644 --- a/examples/multiscales_strict/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/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/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/.config.json b/examples/plate/.config.json new file mode 100644 index 00000000..d5dfa54b --- /dev/null +++ b/examples/plate/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/plate.schema" +} diff --git a/examples/plate_strict/plate_2wells.json b/examples/plate/plate_2wells.json similarity index 98% rename from examples/plate_strict/plate_2wells.json rename to examples/plate/plate_2wells.json index 1a8a5a1e..7791eb9e 100644 --- a/examples/plate_strict/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_strict/plate_6wells.json b/examples/plate/plate_6wells.json similarity index 98% rename from examples/plate_strict/plate_6wells.json rename to examples/plate/plate_6wells.json index 9e5689e1..b0644b0e 100644 --- a/examples/plate_strict/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/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/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/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/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/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/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/examples/well/.config.json b/examples/well/.config.json new file mode 100644 index 00000000..8bb9b29e --- /dev/null +++ b/examples/well/.config.json @@ -0,0 +1,3 @@ +{ + "schema": "schemas/well.schema" +} diff --git a/examples/well_strict/well_2fields.json b/examples/well/well_2fields.json similarity index 91% rename from examples/well_strict/well_2fields.json rename to examples/well/well_2fields.json index a0125337..2692ab4b 100644 --- a/examples/well_strict/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_strict/well_4fields.json b/examples/well/well_4fields.json similarity index 94% rename from examples/well_strict/well_4fields.json rename to examples/well/well_4fields.json index f39e722e..349ee8f9 100644 --- a/examples/well_strict/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/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 4ad83355..98e249e0 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-0.9.dev2)= **Feedback:** [Forum](https://forum.image.sc/tag/ome-ngff), [Github](https://github.com/ome/ngff/issues) @@ -17,17 +17,12 @@ authors: " " ## Abstract -```{warning} -This is a development version of the specification. It includes RFC-3 and RFC-4 -which have not yet been accepted. -``` - 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. ## 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. @@ -45,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. @@ -142,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)). @@ -177,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. @@ -186,22 +181,32 @@ 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-0.9.dev2). ```jsonc { // ... "attributes": { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", // ... } } } ``` -### "coordinateSystems" metadata (coordinate-systems-md)= +### "coordinateSystems" metadata + +(object-coordinatesystem)= +:::{table} 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: @@ -238,10 +243,24 @@ 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)= +#### "axes" metadata + +(object-axis)= +:::{table} 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. @@ -267,51 +286,62 @@ 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. +(spec:orientation-values)= ```{note} -:label: orientation-values + +(object-orientation-anatomical)= +:::{table} Orientation variant: Anatomical + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `type` | MUST | `"anatomical"` | Discriminator for the Anatomical variant. | +| `orientation` | MUST | [Anatomical Orientation](#enum-anatomicalorientation) 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) +(enum-anatomicalorientation)= +:::{table} Enum: AnatomicalOrientation + +| 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) @@ -356,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. @@ -368,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): @@ -385,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: @@ -408,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: @@ -437,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. @@ -448,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. | +(object-coordinatetransformation)= +:::{table} 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: @@ -477,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)). | +(object-coordinatesystemreference)= +:::{table} 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). @@ -494,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: @@ -712,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. @@ -723,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, @@ -732,8 +772,17 @@ 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 + +(object-coordinatetransformation-identity)= +:::{table} CoordinateTransformation variant: 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 @@ -755,8 +804,18 @@ y = j ::: -##### mapAxis (mapAxis-md)= +##### mapAxis + +(object-coordinatetransformation-mapaxis)= +:::{table} CoordinateTransformation variant: 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 @@ -794,8 +853,19 @@ y = i ::: -##### projectAxis (projectAxis-md)= +##### projectAxis + +(object-coordinatetransformation-projectaxis)= +:::{table} CoordinateTransformation variant: 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. @@ -853,8 +923,18 @@ This is useful for example when projecting a 3D CYX image to a 2D YX image by dr ``` -##### translation (translation-md)= +##### translation + +(object-coordinatetransformation-translation)= +:::{table} CoordinateTransformation variant: 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. @@ -880,8 +960,18 @@ y = j - 1.42 ``` ::: -##### scale (scale-md)= +##### scale + +(object-coordinatetransformation-scale)= +:::{table} CoordinateTransformation variant: 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. @@ -894,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 ``` @@ -920,8 +1010,19 @@ these axes are typically not transformed, but must be represented in the scale p ``` ::: -##### affine (affine-md)= +##### affine + +(object-coordinatetransformation-affine)= +:::{table} CoordinateTransformation variant: 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 @@ -1008,8 +1109,19 @@ these axes are typically not transformed, but must be represented in the transfo ``` ::: -##### rotation (rotation-md)= +##### rotation + +(object-coordinatetransformation-rotation)= +:::{table} CoordinateTransformation variant: 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. @@ -1020,7 +1132,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** @@ -1043,8 +1155,18 @@ y = 1*i + 0*j ``` ::: -##### sequence (sequence-md)= +##### sequence + +(object-coordinatetransformation-sequence)= +:::{table} CoordinateTransformation variant: 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 @@ -1090,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. @@ -1103,6 +1225,28 @@ The `coordinates` and `displacements` transformations are not invertible in gene but implementations MAY approximate their inverses. ``` +(object-coordinatetransformation-coordinates)= +:::{table} CoordinateTransformation variant: 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. | + +::: + +(object-coordinatetransformation-displacements)= +:::{table} CoordinateTransformation variant: 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: @@ -1217,8 +1361,29 @@ Otherwise, the vector field is interpolated to obtain a displacement value for t ::: -##### byDimension (byDimension-md)= +##### byDimension + +(object-coordinatetransformation-bydimension)= +:::{table} CoordinateTransformation variant: 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. | + +::: + +(object-subtransformation)= +:::{table} 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`. | + +::: `byDimension` transformations build a high dimensional transformation using lower dimensional transformations on subsets of dimensions. @@ -1277,8 +1442,19 @@ 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 + +(object-coordinatetransformation-bijection)= +:::{table} CoordinateTransformation variant: 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. @@ -1315,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, @@ -1326,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. | +(object-multiscale)= +:::{table} 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. | + +::: + +(object-dataset)= +:::{table} 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) @@ -1360,8 +1551,9 @@ Each object provides the following fields: within the array. -```{hint} (spec:hint:multiscales-intrinsic-coordinate-system)= +```{hint} + [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. @@ -1461,7 +1653,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 ``` ::: @@ -1481,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"`): @@ -1530,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 @@ -1564,6 +1756,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. +(object-imagelabel)= +:::{table} 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, @@ -1571,6 +1774,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. +(object-labelcolor)= +:::{table} 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. @@ -1582,6 +1796,16 @@ 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 + +| 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. @@ -1589,6 +1813,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. +(object-source)= +:::{table} 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. @@ -1620,7 +1853,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/multiscales_reference_to_label.json :language: json ``` @@ -1630,7 +1863,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" ] @@ -1644,7 +1877,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 ``` @@ -1653,12 +1886,40 @@ Pixels with a 1 in the Zarr array, which correspond to cellular space, will be d ::: -### "plate" metadata (plate-md)= +### "plate" metadata + +(object-plate)= +:::{table} 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. +(object-acquisition)= +:::{table} 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 @@ -1673,6 +1934,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. +(object-column)= +:::{table} 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. @@ -1691,6 +1961,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. +(object-row)= +:::{table} 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. @@ -1703,6 +1982,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`). +(object-platewell)= +:::{table} 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 @@ -1723,24 +2013,43 @@ 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 ``` ::: -### "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. +(object-well)= +:::{table} Object: Well + +| key | requirement | type | description | +| --- | ----------- | ---- | ----------- | +| `images` | MUST | array of [FieldOfView](#object-fieldofview) | Fields of view of the well. | + +::: + +(object-fieldofview)= +:::{table} 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 @@ -1759,24 +2068,34 @@ 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 ``` ::: -### "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. +(object-scene)= +:::{table} 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`, @@ -1928,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/justfile b/justfile new file mode 100644 index 00000000..ea8b178a --- /dev/null +++ b/justfile @@ -0,0 +1,61 @@ +_: + just --list + +_prebuild: + uv run python pre_build.py + +# Build the specification in the _build/ directory. +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 + +# Check spelling in the source files; +# configured in pyproject.toml. +spell: + uv run codespell + +# Rebuild the `CITATION.cff` file from `myst.yml`. +cff: + uv run jupyter book build --cff + +# Run all lint commands. +lint: spell pre-commit + +# Run schema tests. +test: + 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 + +# Clean up files generated by the pre-build script. +clean-prebuild: + rm -rf \ + footer.md \ + _authors.md \ + examples/*.md \ + examples/**/*.md \ + schemas/*.md \ + schemas/**/*.md \ + 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 diff --git a/pre_build.py b/pre_build.py index 86a4d0d9..40b116ef 100644 --- a/pre_build.py +++ b/pre_build.py @@ -1,9 +1,12 @@ # %% -import os import glob +import logging +import os from pathlib import Path + import jsonc as json -import logging + +from _version import __version__ # Suppress warnings from json-schema-for-humans about unresolvable URLs logging.getLogger().setLevel(logging.ERROR) @@ -46,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 @@ -94,7 +97,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: @@ -113,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: "" --- diff --git a/prek.toml b/prek.toml new file mode 100644 index 00000000..ba027c85 --- /dev/null +++ b/prek.toml @@ -0,0 +1,25 @@ +[[repos]] +repo = "builtin" +hooks = [ + { id = "trailing-whitespace" }, + { id = "end-of-file-fixer" }, + { 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", + ] }, +] + +[[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" }] diff --git a/pyproject.toml b/pyproject.toml index 71c7328a..c0e43970 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,20 +7,27 @@ 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", ] -[project.optional-dependencies] -testing = [ - "tox", - "pytest", # https://docs.pytest.org/en/latest/contents.html +[dependency-groups] +test = ["pytest", "jsonschema"] +lint = ["codespell", "prek"] +dev = [ + "parver>=1.0.1.post0", + "rust-just", + { include-group = "test" }, + { include-group = "lint" }, ] [tool.codespell] ignore-regex = '\bComparin\b' +skip = ".git,references.bib,.venv,.tox,*.css,_build" +ignore-words-list = "commend,Fuchsia" +check-hidden = true [tool.hatch.version] path = "_version.py" @@ -30,4 +37,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" diff --git a/schemas/_version.schema b/schemas/_version.schema index aefecf67..4fd5143a 100644 --- a/schemas/_version.schema +++ b/schemas/_version.schema @@ -1,10 +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.dev2", "0.9.dev1" ] } diff --git a/schemas/axes.schema b/schemas/axes.schema index 004e2f39..818b3868 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", @@ -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/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..3b749a61 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", @@ -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": [ diff --git a/schemas/coordinate_transformations.schema b/schemas/coordinate_transformations.schema index 8f0af7b9..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", @@ -365,14 +365,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 effb6e84..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"] } @@ -113,7 +123,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"}, @@ -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..98db4132 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,12 +9,12 @@ "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": { "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" }, { 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/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/scripts/bumpversion.py b/scripts/bumpversion.py new file mode 100755 index 00000000..a7de6c69 --- /dev/null +++ b/scripts/bumpversion.py @@ -0,0 +1,408 @@ +#!/usr/bin/env -S uv run --script +# /// script +# dependencies = [ +# "parver", +# ] +# /// +"""Update version strings in structured files +(schemas, examples, version.py, changelog, tests). + +Text files must be updated manually. +""" +import difflib +import functools +import json +import logging +import runpy +import subprocess as sp +import sys +from argparse import ArgumentParser +from collections.abc import Iterable +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(description=__doc__) + 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 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 + + +@functools.wraps(print) +def eprint(*args, **kwargs): + kwargs.setdefault("file", sys.stderr) + 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) + 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: + 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() + 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. 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( + 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", + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/attributes/spec/invalid/image/duplicate_axes.json b/tests/attributes/spec/invalid/image/duplicate_axes.json index 4c02f7d6..2e774873 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -45,4 +49,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..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.dev1", - "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 97e9b95d..9be3748b 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": [ @@ -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" + } } ] } @@ -54,4 +62,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..4c3e9381 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -60,4 +64,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..911b23ef 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -60,4 +64,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..7f86f259 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"name": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "name": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -45,4 +49,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..cba67e47 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"path": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "path": "intrinsic" + } } ] } @@ -45,4 +49,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..200428b1 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -53,4 +57,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..ddf12a29 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "scale", - "input": {"path": "0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -45,4 +49,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..3ace8f15 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "translation", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -45,4 +49,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..c7aa01ed 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": [ @@ -28,8 +28,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -43,4 +47,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..ebea267b 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": [ @@ -18,8 +18,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -33,4 +37,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..2b25e8ca 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": [ @@ -27,8 +27,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -42,4 +46,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..79e89103 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": [ @@ -13,8 +13,12 @@ 0.13 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -28,4 +32,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..012b5e04 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": [ @@ -29,8 +29,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -44,4 +48,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..0e7ddfb5 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": [ @@ -30,8 +30,12 @@ 1 ], "type": "translation", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -45,4 +49,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..68739a0d 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": [], @@ -14,8 +14,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -29,4 +33,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..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.dev1", - "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 dcdfd3ca..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.dev1", - "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 a5c31f1b..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.dev1", - "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/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/omero/missing_channels.json b/tests/attributes/spec/invalid/omero/missing_channels.json index 7c5b7b58..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": { @@ -53,4 +52,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/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..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.dev1", - "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 + } + ] } -} \ No newline at end of file + }, + "_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 372039fb..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.dev1", - "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 + } + ] } -} \ No newline at end of file + }, + "_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 9823e916..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.dev1", - "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 + ] } -} \ No newline at end of file + }, + "_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 8c0f222b..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.dev1", - "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 - } -} \ No newline at end of file + "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 50bae35a..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.dev1", - "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 + ] } -} \ No newline at end of file + }, + "_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 463b94d6..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 - } -} \ No newline at end of file + "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 a5e02019..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.dev1", - "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 62842f7a..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.dev1", - "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 9c3ae6d7..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.dev1", - "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 aba5da20..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.dev1", - "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 89ccbe07..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.dev1", - "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 a47aa5ab..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.dev1", - "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 a6a42fdf..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.dev1", - "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 1f81f676..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.dev1", - "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 355dbf7c..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.dev1", - "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 175ac94e..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 d61b6fa8..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 be272d0f..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 9b8a7e6b..cdd9465a 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", @@ -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 554f03a9..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 41794973..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 3fd586f8..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "name": "multiscales", @@ -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 430a0252..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.dev1", - "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 676cc273..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.dev1", - "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 b4adcac5..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.dev1", - "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 e051b206..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.dev1", - "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 1c4cbc73..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.dev1", - "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 7c56b75f..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.dev1", - "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 30364313..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.dev1", - "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 7f2010f8..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.dev1", - "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 dec87b5b..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.dev1", - "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 0d688a94..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.dev1", - "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 1bcc730e..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.dev1", - "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/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/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/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/attributes/spec/valid/image/custom_type_axes.json b/tests/attributes/spec/valid/image/custom_type_axes.json index ce0ddc6a..0590f155 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": [ @@ -34,8 +34,12 @@ 1, 1 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] @@ -49,4 +53,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..28399752 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": [ @@ -29,8 +29,12 @@ 0.13, 0.13 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] @@ -44,4 +48,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..3433330f 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": [ @@ -48,8 +48,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -63,4 +67,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..6c856ba5 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": [ @@ -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 49fab4ab..880539fa 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": [ @@ -35,8 +35,12 @@ 0.13 ], "type": "scale", - "input": {"path": "0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -49,4 +53,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..1f090d96 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": [ @@ -13,8 +13,12 @@ 1, 1 ], - "input": {"path": "path/to/0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "path/to/0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -56,4 +60,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..ed45c6de 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": [ @@ -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 e61f81b3..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.dev1", - "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 360bbd24..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.dev1", - "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 514c0ece..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.dev1", - "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 306bfa99..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.dev1", - "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 cd22d493..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.dev1", - "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 efb65b5b..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 @@ -1,6 +1,6 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "multiscales": [ { "coordinateSystems": [ @@ -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 668671d3..631c6a12 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": [ @@ -33,8 +33,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -48,4 +52,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..8ddb0ff2 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": [ @@ -25,8 +25,12 @@ 1 ], "type": "scale", - "input": {"path": "s0"}, - "output": {"name": "intrinsic"} + "input": { + "path": "s0" + }, + "output": { + "name": "intrinsic" + } } ] } @@ -40,4 +44,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..698f6694 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": [ @@ -33,8 +33,12 @@ 1, 1 ], - "input": {"path": "0"}, - "output": {"name": "intrinsic"}, + "input": { + "path": "0" + }, + "output": { + "name": "intrinsic" + }, "type": "scale" } ] @@ -48,4 +52,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..3bceaf4d 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": [ @@ -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/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..2ba4d06b 100644 --- a/tests/attributes/spec/valid/scene/scene.json +++ b/tests/attributes/spec/valid/scene/scene.json @@ -1,11 +1,16 @@ { "ome": { - "version": "0.9.dev1", + "version": "0.9.dev2", "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": [ @@ -68,4 +83,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..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.dev1", - "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: " + ] } -} \ No newline at end of file + }, + "_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 6aa86af6..6d31610b 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", @@ -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 5afad7b2..c1e807d0 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", @@ -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 f953e9ca..f89b0a43 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", @@ -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 e0e933e6..ee359321 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", @@ -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 c06264bb..9cfff33c 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", @@ -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 b1aea791..79700b74 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", @@ -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 a6468560..d83cceb8 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", @@ -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 839f5a4f..8d6fdec3 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", @@ -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 442ea458..6b3e6c3d 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", @@ -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/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/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 94b0da7a..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": "intrinsic"}, - "output": {"name": "world"} - } - ], - "name": "image_with_omero_metadata", - "type": "foo", - "metadata": { - "key": "value" - } - } - ], - "omero": { - "channels": [ - { - "active": true, - "color": "00FF00", - "inverted": false, - "label": "FITC", - "window": { - "end": 813.0, - "max": 870.0, - "min": 102.0, - "start": 82.0 - } - }, - { - "active": true, - "color": "FF0000", - "inverted": false, - "label": "RD-TR-PE", - "window": { - "end": 815.0, - "max": 441.0, - "min": 129.0, - "start": 78.0 - } - } - ], - "id": 1, - "rdefs": { - "defaultT": 0, - "defaultZ": 2, - "model": "color" - }, - "version": "0.9.dev1" - } - }, - "_conformance": { - "schema": { - "id": "schemas/strict_image.schema" - }, - "strict": true - } -} \ No newline at end of file diff --git a/tests/attributes/strict/valid/image/multiscales_example.json b/tests/attributes/strict/valid/image/multiscales_example.json deleted file mode 100644 index 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..e08f37dd 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,30 +1,28 @@ -import json import glob +import json import os - +import runpy 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) +version = runpy.run_path("_version.py")["__version__"] + 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 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" + f"https://ngff.openmicroscopy.org/{version}/schemas/ome_zarr.schema" ] @@ -65,8 +63,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"): @@ -79,23 +77,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) @@ -127,8 +108,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/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..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,56 +1,64 @@ { - "ome": { - "version": "0.9.dev1", - "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/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/zarr.json similarity index 97% 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 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/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/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..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,56 +1,64 @@ { - "ome": { - "version": "0.9.dev1", - "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 dcdfd3ca..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,56 +1,64 @@ { - "ome": { - "version": "0.9.dev1", - "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 a5c31f1b..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,55 +1,63 @@ { - "ome": { - "version": "0.9.dev1", - "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 + } + } } 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 546191df..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 1108219d..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/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 +} 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 +} 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/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 new file mode 100644 index 00000000..3bcbdcd0 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2113 @@ +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 = "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 = "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 = "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" +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 = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { 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 = [ + { 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 = "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.2" +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/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/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]] +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.dev-dependencies] +dev = [ + { name = "codespell" }, + { name = "jsonschema" }, + { name = "parver" }, + { name = "prek" }, + { name = "pytest" }, + { name = "rust-just" }, +] +lint = [ + { name = "codespell" }, + { name = "prek" }, +] +test = [ + { name = "jsonschema" }, + { name = "pytest" }, +] + +[package.metadata] +requires-dist = [ + { name = "json-schema-for-humans" }, + { name = "json-with-comments" }, + { name = "jsonschema-markdown" }, + { name = "jupyter-book", specifier = "==2.0.2" }, + { name = "mystmd", specifier = "==1.6.3" }, + { name = "tomli" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "codespell" }, + { name = "jsonschema" }, + { name = "parver", specifier = ">=1.0.1.post0" }, + { name = "prek" }, + { name = "pytest" }, + { name = "rust-just" }, +] +lint = [ + { name = "codespell" }, + { name = "prek" }, +] +test = [ + { name = "jsonschema" }, + { name = "pytest" }, +] + +[[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 = "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" +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 = "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" +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 = "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-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 = "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" +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 = "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 = "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" }, +] diff --git a/version_history.md b/version_history.md index 66a7aa2c..87e70a08 100644 --- a/version_history.md +++ b/version_history.md @@ -1,13 +1,22 @@ --- author: "" --- -# Version History + (ngff-spec:history)= +# Version History 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 + +## 0.9.dev2 - TBC + +### 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 @@ -20,16 +29,16 @@ 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 + - 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. @@ -45,7 +54,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